solid-ui 2.4.27-9f7a01da → 2.4.27-a6ef5829

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.
@@ -85,7 +85,7 @@ var ChatChannel = /*#__PURE__*/function () {
85
85
  var oldMsg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
86
86
  var deleteIt = arguments.length > 2 ? arguments[2] : undefined;
87
87
  return /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
88
- var sts, now, timestamp, dateStamp, chatDocument, message, me, msg, oldMsgMaker, errMsg, privateKey, pubKey, sig, _errMsg;
88
+ var sts, now, timestamp, dateStamp, chatDocument, message, me, msg, oldMsgMaker, errMsg, privateKey, sig, _errMsg;
89
89
  return _regenerator["default"].wrap(function _callee2$(_context2) {
90
90
  while (1) switch (_context2.prev = _context2.next) {
91
91
  case 0:
@@ -133,46 +133,46 @@ var ChatChannel = /*#__PURE__*/function () {
133
133
  sts.push($rdf.st(message, ns.dct('created'), dateStamp, chatDocument));
134
134
  msg.created = dateStamp.value;
135
135
  if (!me) {
136
- _context2.next = 36;
136
+ _context2.next = 35;
137
137
  break;
138
138
  }
139
139
  sts.push($rdf.st(message, ns.foaf('maker'), me, chatDocument));
140
140
  msg.maker = me.uri;
141
141
  // privateKey the cached private key of me, cached in store
142
142
  _context2.next = 32;
143
- return (0, _keys.getPrivateKey)(me.uri);
143
+ return (0, _keys.getPrivateKey)(me);
144
144
  case 32:
145
145
  privateKey = _context2.sent;
146
+ // me.uri)
146
147
  // const privateKey0 = 'a11bc5d2eee6cdb3b37f5473a712cad905ccfb13fb2ccdbf1be0a1ac4fdc7d2a'
147
- // const pubKey0 = '023a9da707bee1302f66083c9d95673ff969b41607a66f52686fa774d64ceb87'
148
- pubKey = (0, _keys.getPublicKey)(me.uri);
149
- sig = (0, _signature.signMsg)(msg, privateKey);
150
- /* const verify = verifySignature(sig, msg, pubKey) // alain to remove
148
+ sig = (0, _signature.signMsg)(msg, privateKey); // const pubKey0 = '023a9da707bee1302f66083c9d95673ff969b41607a66f52686fa774d64ceb87'
149
+ /* const pubKey = await getPublicKey(me)
150
+ const verify = verifySignature(sig, msg, pubKey) // alain to remove
151
151
  debug.warn('sig ' + sig)
152
152
  debug.warn('verifySign ' + verify)
153
153
  debug.warn(msg) */
154
154
  sts.push($rdf.st(message, $rdf.sym("".concat(_signature.SEC, "Proof")), $rdf.lit(sig), chatDocument));
155
- case 36:
156
- _context2.prev = 36;
157
- _context2.next = 39;
155
+ case 35:
156
+ _context2.prev = 35;
157
+ _context2.next = 38;
158
158
  return _solidLogic.store.updater.update([], sts);
159
- case 39:
160
- _context2.next = 47;
159
+ case 38:
160
+ _context2.next = 46;
161
161
  break;
162
- case 41:
163
- _context2.prev = 41;
164
- _context2.t0 = _context2["catch"](36);
162
+ case 40:
163
+ _context2.prev = 40;
164
+ _context2.t0 = _context2["catch"](35);
165
165
  _errMsg = 'Error saving chat message: ' + _context2.t0;
166
166
  debug.warn(_errMsg);
167
167
  alert(_errMsg);
168
168
  throw new Error(_errMsg);
169
- case 47:
169
+ case 46:
170
170
  return _context2.abrupt("return", message);
171
- case 48:
171
+ case 47:
172
172
  case "end":
173
173
  return _context2.stop();
174
174
  }
175
- }, _callee2, null, [[36, 41]]);
175
+ }, _callee2, null, [[35, 40]]);
176
176
  })();
177
177
  });
178
178
  function updateMessage(_x2) {
@@ -1 +1 @@
1
- {"version":3,"file":"chatLogic.js","names":["debug","_interopRequireWildcard","require","_dateFolder","_solidLogic","ns","$rdf","utils","_signature","_keys","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","_typeof","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","ChatChannel","channel","options","_classCallCheck2","channelRoot","doc","dateFolder","DateFolder","div","_createClass2","value","_createMessage","_asyncToGenerator2","_regenerator","mark","_callee","text","wrap","_callee$","_context","prev","next","abrupt","updateMessage","stop","createMessage","_x","apply","arguments","_updateMessage","_this","oldMsg","length","undefined","deleteIt","_callee2","sts","now","timestamp","dateStamp","chatDocument","message","me","msg","oldMsgMaker","errMsg","privateKey","pubKey","sig","_errMsg","_callee2$","_context2","Date","getTime","term","leafDocumentFromDate","store","sym","uri","authn","currentUser","getBlankMsg","id","any","foaf","push","st","mostRecentVersion","dct","schema","warn","alert","Error","wf","sioc","literal","content","created","maker","getPrivateKey","sent","getPublicKey","signMsg","concat","SEC","lit","updater","update","t0","_x2","_deleteMessage","_callee3","_callee3$","_context3","deleteMessage","_x3","exports","originalVersion","isDeleted","holds","isReplaced","isHidden","nick","person","s","label","_createIfNotExists","_x4","_createIfNotExists2","contentType","data","_callee4","response","_callee4$","_context4","fetcher","load","status","log","webOperation","t1","requested"],"sources":["../../src/chat/chatLogic.js"],"sourcesContent":["/**\n * Contains the [[ChatChannel]] class and logic for Solid Chat\n * @packageDocumentation\n */\n\nimport * as debug from '../debug'\nimport { DateFolder } from './dateFolder'\nimport { store, authn } from 'solid-logic'\nimport * as ns from '../ns'\nimport * as $rdf from 'rdflib' // pull in first avoid cross-refs\nimport * as utils from '../utils'\nimport { getBlankMsg, signMsg, SEC, verifySignature } from './signature'\nimport { getPrivateKey, getPublicKey } from './keys'\n\n/* The Solid logic for a 'LongChat'\n*/\n/**\n * Common code for a chat (discussion area of messages about something)\n * This version runs over a series of files for different time periods\n *\n * Parameters for the whole chat like its title are stored on\n * index.ttl#this and the chats messages are stored in YYYY/MM/DD/chat.ttl\n *\n */\n\nexport class ChatChannel {\n constructor (channel, options) {\n this.channel = channel\n this.channelRoot = channel.doc()\n this.options = options\n this.dateFolder = new DateFolder(this.channelRoot, 'chat.ttl')\n this.div = null // : HTMLElement\n }\n\n /* Store a new message in the web,\n */\n async createMessage (text) {\n return this.updateMessage(text)\n }\n\n /* Store a new message in the web,\n as a replacement for an existing one.\n The old one iis left, and the two are linked\n */\n async updateMessage (text, oldMsg = null, deleteIt) {\n const sts = []\n const now = new Date()\n const timestamp = '' + now.getTime()\n const dateStamp = $rdf.term(now)\n const chatDocument = oldMsg ? oldMsg.doc() : this.dateFolder.leafDocumentFromDate(now)\n const message = store.sym(chatDocument.uri + '#' + 'Msg' + timestamp)\n // const content = store.literal(text)\n\n const me = authn.currentUser() // If already logged on\n\n const msg = getBlankMsg()\n msg.id = message.uri\n if (oldMsg) { // edit message replaces old one\n const oldMsgMaker = store.any(oldMsg, ns.foaf('maker')) // may not be needed here, but needed on READ\n if (oldMsgMaker.uri === me.uri) {\n sts.push($rdf.st(mostRecentVersion(oldMsg), ns.dct('isReplacedBy'), message, chatDocument))\n if (deleteIt) { // we need to add a specific signature, else anyone can delete a msg ?\n sts.push($rdf.st(message, ns.schema('dateDeleted'), dateStamp, chatDocument))\n // msg.dateDeleted = dateStamp\n }\n } else {\n const errMsg = 'Error you cannot delete/edit a message from someone else : \\n' + oldMsgMaker.uri\n debug.warn(errMsg)\n alert(errMsg)\n throw new Error(errMsg)\n }\n } else { // link new message to channel\n sts.push($rdf.st(this.channel, ns.wf('message'), message, chatDocument))\n }\n sts.push(\n $rdf.st(message, ns.sioc('content'), store.literal(text), chatDocument)\n )\n msg.content = text\n\n sts.push(\n $rdf.st(message, ns.dct('created'), dateStamp, chatDocument)\n )\n msg.created = dateStamp.value\n if (me) {\n sts.push($rdf.st(message, ns.foaf('maker'), me, chatDocument))\n msg.maker = me.uri\n // privateKey the cached private key of me, cached in store\n const privateKey = await getPrivateKey(me.uri)\n // const privateKey0 = 'a11bc5d2eee6cdb3b37f5473a712cad905ccfb13fb2ccdbf1be0a1ac4fdc7d2a'\n // const pubKey0 = '023a9da707bee1302f66083c9d95673ff969b41607a66f52686fa774d64ceb87'\n const pubKey = getPublicKey(me.uri)\n\n const sig = signMsg(msg, privateKey)\n /* const verify = verifySignature(sig, msg, pubKey) // alain to remove\n debug.warn('sig ' + sig)\n debug.warn('verifySign ' + verify)\n debug.warn(msg) */\n sts.push($rdf.st(message, $rdf.sym(`${SEC}Proof`), $rdf.lit(sig), chatDocument))\n }\n try {\n await store.updater.update([], sts)\n } catch (err) {\n const errMsg = 'Error saving chat message: ' + err\n debug.warn(errMsg)\n alert(errMsg)\n throw new Error(errMsg)\n }\n return message\n }\n\n /* Mark a message as deleted\n * Wee add a new version of the message,m witha deletion flag (deletion date)\n * so that the deletion can be revoked by adding another non-deleted update\n */\n async deleteMessage (message) {\n return this.updateMessage('(message deleted)', message, true)\n }\n} // class ChatChannel\n\nexport function originalVersion (message) {\n let msg = message\n while (msg) {\n message = msg\n msg = store.any(null, ns.dct('isReplacedBy'), message, message.doc())\n }\n return message\n}\n\nexport function mostRecentVersion (message) {\n let msg = message\n while (msg) {\n message = msg\n msg = store.any(message, ns.dct('isReplacedBy'), null, message.doc())\n }\n return message\n}\n\nexport function isDeleted (message) {\n return store.holds(message, ns.schema('dateDeleted'), null, message.doc())\n}\n\nexport function isReplaced (message) {\n return store.holds(message, ns.dct('isReplacedBy'), null, message.doc())\n}\n\nexport function isHidden (message) {\n return this.isDeleted(message) || this.isReplaced(message)\n}\n\n// A Nickname for a person\n\nexport function nick (person) {\n const s = store.any(person, ns.foaf('nick'))\n if (s) return '' + s.value\n return '' + utils.label(person)\n}\n\nexport async function _createIfNotExists (doc, contentType = 'text/turtle', data = '') {\n let response\n try {\n response = await store.fetcher.load(doc)\n } catch (err) {\n if (err.response.status === 404) {\n debug.log(\n 'createIfNotExists: doc does NOT exist, will create... ' + doc\n )\n try {\n response = await store.fetcher.webOperation('PUT', doc.uri, {\n data,\n contentType\n })\n } catch (err) {\n debug.log('createIfNotExists doc FAILED: ' + doc + ': ' + err)\n throw err\n }\n delete store.fetcher.requested[doc.uri] // delete cached 404 error\n // debug.log('createIfNotExists doc created ok ' + doc)\n return response\n } else {\n debug.log(\n 'createIfNotExists doc load error NOT 404: ' + doc + ': ' + err\n )\n throw err\n }\n }\n // debug.log('createIfNotExists: doc exists, all good: ' + doc)\n return response\n}\n// ends\n"],"mappings":"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"}
1
+ {"version":3,"file":"chatLogic.js","names":["debug","_interopRequireWildcard","require","_dateFolder","_solidLogic","ns","$rdf","utils","_signature","_keys","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","_typeof","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","ChatChannel","channel","options","_classCallCheck2","channelRoot","doc","dateFolder","DateFolder","div","_createClass2","value","_createMessage","_asyncToGenerator2","_regenerator","mark","_callee","text","wrap","_callee$","_context","prev","next","abrupt","updateMessage","stop","createMessage","_x","apply","arguments","_updateMessage","_this","oldMsg","length","undefined","deleteIt","_callee2","sts","now","timestamp","dateStamp","chatDocument","message","me","msg","oldMsgMaker","errMsg","privateKey","sig","_errMsg","_callee2$","_context2","Date","getTime","term","leafDocumentFromDate","store","sym","uri","authn","currentUser","getBlankMsg","id","any","foaf","push","st","mostRecentVersion","dct","schema","warn","alert","Error","wf","sioc","literal","content","created","maker","getPrivateKey","sent","signMsg","concat","SEC","lit","updater","update","t0","_x2","_deleteMessage","_callee3","_callee3$","_context3","deleteMessage","_x3","exports","originalVersion","isDeleted","holds","isReplaced","isHidden","nick","person","s","label","_createIfNotExists","_x4","_createIfNotExists2","contentType","data","_callee4","response","_callee4$","_context4","fetcher","load","status","log","webOperation","t1","requested"],"sources":["../../src/chat/chatLogic.js"],"sourcesContent":["/**\n * Contains the [[ChatChannel]] class and logic for Solid Chat\n * @packageDocumentation\n */\n\nimport * as debug from '../debug'\nimport { DateFolder } from './dateFolder'\nimport { store, authn } from 'solid-logic'\nimport * as ns from '../ns'\nimport * as $rdf from 'rdflib' // pull in first avoid cross-refs\nimport * as utils from '../utils'\nimport { getBlankMsg, signMsg, SEC, verifySignature } from './signature'\nimport { getPrivateKey, getPublicKey } from './keys'\n\n/* The Solid logic for a 'LongChat'\n*/\n/**\n * Common code for a chat (discussion area of messages about something)\n * This version runs over a series of files for different time periods\n *\n * Parameters for the whole chat like its title are stored on\n * index.ttl#this and the chats messages are stored in YYYY/MM/DD/chat.ttl\n *\n */\n\nexport class ChatChannel {\n constructor (channel, options) {\n this.channel = channel\n this.channelRoot = channel.doc()\n this.options = options\n this.dateFolder = new DateFolder(this.channelRoot, 'chat.ttl')\n this.div = null // : HTMLElement\n }\n\n /* Store a new message in the web,\n */\n async createMessage (text) {\n return this.updateMessage(text)\n }\n\n /* Store a new message in the web,\n as a replacement for an existing one.\n The old one iis left, and the two are linked\n */\n async updateMessage (text, oldMsg = null, deleteIt) {\n const sts = []\n const now = new Date()\n const timestamp = '' + now.getTime()\n const dateStamp = $rdf.term(now)\n const chatDocument = oldMsg ? oldMsg.doc() : this.dateFolder.leafDocumentFromDate(now)\n const message = store.sym(chatDocument.uri + '#' + 'Msg' + timestamp)\n // const content = store.literal(text)\n\n const me = authn.currentUser() // If already logged on\n\n const msg = getBlankMsg()\n msg.id = message.uri\n if (oldMsg) { // edit message replaces old one\n const oldMsgMaker = store.any(oldMsg, ns.foaf('maker')) // may not be needed here, but needed on READ\n if (oldMsgMaker.uri === me.uri) {\n sts.push($rdf.st(mostRecentVersion(oldMsg), ns.dct('isReplacedBy'), message, chatDocument))\n if (deleteIt) { // we need to add a specific signature, else anyone can delete a msg ?\n sts.push($rdf.st(message, ns.schema('dateDeleted'), dateStamp, chatDocument))\n // msg.dateDeleted = dateStamp\n }\n } else {\n const errMsg = 'Error you cannot delete/edit a message from someone else : \\n' + oldMsgMaker.uri\n debug.warn(errMsg)\n alert(errMsg)\n throw new Error(errMsg)\n }\n } else { // link new message to channel\n sts.push($rdf.st(this.channel, ns.wf('message'), message, chatDocument))\n }\n sts.push(\n $rdf.st(message, ns.sioc('content'), store.literal(text), chatDocument)\n )\n msg.content = text\n\n sts.push(\n $rdf.st(message, ns.dct('created'), dateStamp, chatDocument)\n )\n msg.created = dateStamp.value\n if (me) {\n sts.push($rdf.st(message, ns.foaf('maker'), me, chatDocument))\n msg.maker = me.uri\n // privateKey the cached private key of me, cached in store\n const privateKey = await getPrivateKey(me) // me.uri)\n // const privateKey0 = 'a11bc5d2eee6cdb3b37f5473a712cad905ccfb13fb2ccdbf1be0a1ac4fdc7d2a'\n\n const sig = signMsg(msg, privateKey)\n // const pubKey0 = '023a9da707bee1302f66083c9d95673ff969b41607a66f52686fa774d64ceb87'\n /* const pubKey = await getPublicKey(me)\n const verify = verifySignature(sig, msg, pubKey) // alain to remove\n debug.warn('sig ' + sig)\n debug.warn('verifySign ' + verify)\n debug.warn(msg) */\n sts.push($rdf.st(message, $rdf.sym(`${SEC}Proof`), $rdf.lit(sig), chatDocument))\n }\n try {\n await store.updater.update([], sts)\n } catch (err) {\n const errMsg = 'Error saving chat message: ' + err\n debug.warn(errMsg)\n alert(errMsg)\n throw new Error(errMsg)\n }\n return message\n }\n\n /* Mark a message as deleted\n * Wee add a new version of the message,m witha deletion flag (deletion date)\n * so that the deletion can be revoked by adding another non-deleted update\n */\n async deleteMessage (message) {\n return this.updateMessage('(message deleted)', message, true)\n }\n} // class ChatChannel\n\nexport function originalVersion (message) {\n let msg = message\n while (msg) {\n message = msg\n msg = store.any(null, ns.dct('isReplacedBy'), message, message.doc())\n }\n return message\n}\n\nexport function mostRecentVersion (message) {\n let msg = message\n while (msg) {\n message = msg\n msg = store.any(message, ns.dct('isReplacedBy'), null, message.doc())\n }\n return message\n}\n\nexport function isDeleted (message) {\n return store.holds(message, ns.schema('dateDeleted'), null, message.doc())\n}\n\nexport function isReplaced (message) {\n return store.holds(message, ns.dct('isReplacedBy'), null, message.doc())\n}\n\nexport function isHidden (message) {\n return this.isDeleted(message) || this.isReplaced(message)\n}\n\n// A Nickname for a person\n\nexport function nick (person) {\n const s = store.any(person, ns.foaf('nick'))\n if (s) return '' + s.value\n return '' + utils.label(person)\n}\n\nexport async function _createIfNotExists (doc, contentType = 'text/turtle', data = '') {\n let response\n try {\n response = await store.fetcher.load(doc)\n } catch (err) {\n if (err.response.status === 404) {\n debug.log(\n 'createIfNotExists: doc does NOT exist, will create... ' + doc\n )\n try {\n response = await store.fetcher.webOperation('PUT', doc.uri, {\n data,\n contentType\n })\n } catch (err) {\n debug.log('createIfNotExists doc FAILED: ' + doc + ': ' + err)\n throw err\n }\n delete store.fetcher.requested[doc.uri] // delete cached 404 error\n // debug.log('createIfNotExists doc created ok ' + doc)\n return response\n } else {\n debug.log(\n 'createIfNotExists doc load error NOT 404: ' + doc + ': ' + err\n )\n throw err\n }\n }\n // debug.log('createIfNotExists: doc exists, all good: ' + doc)\n return response\n}\n// ends\n"],"mappings":"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"}
@@ -1,5 +1,6 @@
1
+ import { NamedNode } from 'rdflib';
1
2
  export declare function generatePrivateKey(): string;
2
3
  export declare function generatePublicKey(privateKey: string): string;
3
- export declare function getPublicKey(webId: any): Promise<string | undefined>;
4
- export declare function getPrivateKey(webId: string): Promise<string>;
4
+ export declare function getPublicKey(webId: NamedNode): Promise<string | undefined>;
5
+ export declare function getPrivateKey(webId: NamedNode): Promise<string>;
5
6
  //# sourceMappingURL=keys.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../src/chat/keys.ts"],"names":[],"mappings":"AAQA,wBAAgB,kBAAkB,IAAK,MAAM,CAE5C;AAED,wBAAgB,iBAAiB,CAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED,wBAAgB,YAAY,CAAE,KAAK,KAAA,+BAGlC;AA4DD,wBAAsB,aAAa,CAAE,KAAK,EAAE,MAAM,mBAqCjD"}
1
+ {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../src/chat/keys.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAIlC,wBAAgB,kBAAkB,IAAK,MAAM,CAE5C;AAED,wBAAgB,iBAAiB,CAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED,wBAAsB,YAAY,CAAE,KAAK,EAAE,SAAS,+BAanD;AAED,wBAAsB,aAAa,CAAE,KAAK,EAAE,SAAS,mBA6CpD"}
package/lib/chat/keys.js CHANGED
@@ -17,6 +17,7 @@ var _utils = require("@noble/hashes/utils");
17
17
  var _signature = require("./signature");
18
18
  var _solidLogic = require("solid-logic");
19
19
  var $rdf = _interopRequireWildcard(require("rdflib"));
20
+ var _cryptoKeyHelpers = require("../utils/cryptoKeyHelpers");
20
21
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
21
22
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
22
23
  function generatePrivateKey() {
@@ -25,159 +26,273 @@ function generatePrivateKey() {
25
26
  function generatePublicKey(privateKey) {
26
27
  return (0, _utils.bytesToHex)(_secp256k.schnorr.getPublicKey(privateKey));
27
28
  }
28
- function getPublicKey(webId) {
29
- var publicKey = publicKeyExists(webId);
30
- return publicKey;
29
+ function getPublicKey(_x) {
30
+ return _getPublicKey.apply(this, arguments);
31
31
  }
32
- var pubKeyUrl = function pubKeyUrl(webId) {
33
- var url = new URL(webId);
34
- var publicKeyUrl = url.origin + '/profile/keys/publicKey.ttl';
35
- return publicKeyUrl;
36
- };
37
- function publicKeyExists(_x) {
38
- return _publicKeyExists.apply(this, arguments);
39
- }
40
- function _publicKeyExists() {
41
- _publicKeyExists = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(webId) {
42
- var publicKey;
32
+ function _getPublicKey() {
33
+ _getPublicKey = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(webId) {
34
+ var publicKeyDoc, key;
43
35
  return _regenerator["default"].wrap(function _callee$(_context) {
44
36
  while (1) switch (_context.prev = _context.next) {
45
37
  case 0:
46
38
  _context.next = 2;
47
- return _solidLogic.store.fetcher.load(pubKeyUrl(webId));
39
+ return _solidLogic.store.fetcher.load(webId);
48
40
  case 2:
49
- // url.href)
50
- publicKey = _solidLogic.store.any(_solidLogic.store.sym(webId), _solidLogic.store.sym(_signature.CERT + 'PublicKey'));
51
- return _context.abrupt("return", publicKey === null || publicKey === void 0 ? void 0 : publicKey.value);
41
+ _context.next = 4;
42
+ return (0, _cryptoKeyHelpers.pubKeyUrl)(webId);
52
43
  case 4:
44
+ publicKeyDoc = _context.sent;
45
+ _context.prev = 5;
46
+ _context.next = 8;
47
+ return _solidLogic.store.fetcher.load(publicKeyDoc);
48
+ case 8:
49
+ // url.href)
50
+ key = _solidLogic.store.any(webId, _solidLogic.store.sym(_signature.CERT + 'PublicKey'));
51
+ return _context.abrupt("return", key === null || key === void 0 ? void 0 : key.value);
52
+ case 12:
53
+ _context.prev = 12;
54
+ _context.t0 = _context["catch"](5);
55
+ return _context.abrupt("return", undefined);
56
+ case 15:
53
57
  case "end":
54
58
  return _context.stop();
55
59
  }
56
- }, _callee);
60
+ }, _callee, null, [[5, 12]]);
57
61
  }));
58
- return _publicKeyExists.apply(this, arguments);
62
+ return _getPublicKey.apply(this, arguments);
59
63
  }
60
- var privKeyUrl = function privKeyUrl(webId) {
61
- var url = new URL(webId);
62
- var privateKeyUrl = url.origin + '/profile/keys/privateKey.ttl';
63
- return privateKeyUrl;
64
- };
65
- function privateKeyExists(_x2) {
66
- return _privateKeyExists.apply(this, arguments);
64
+ function getPrivateKey(_x2) {
65
+ return _getPrivateKey.apply(this, arguments);
67
66
  }
68
- function _privateKeyExists() {
69
- _privateKeyExists = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(webId) {
70
- var privateKeyUrl, privateKey, _err$response, data, contentType, response;
67
+ /**
68
+ * key container ACL
69
+ * @param me
70
+ * @returns aclBody
71
+ */
72
+ function _getPrivateKey() {
73
+ _getPrivateKey = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(webId) {
74
+ var publicKeyDoc, privateKeyDoc, publicKey, privateKey, validPublicKey, del, add, newPublicKey, keyContainer;
71
75
  return _regenerator["default"].wrap(function _callee2$(_context2) {
72
76
  while (1) switch (_context2.prev = _context2.next) {
73
77
  case 0:
74
- /* const url = new URL(webId)
75
- const privateKeyUrl = url.protocol + '//' + url.host + '/profile/privateKey.ttl' */
76
- privateKeyUrl = privKeyUrl(webId);
77
- /* debug.warn('Alain privateKeyExists')
78
- debug.warn(webId)
79
- debug.warn(privateKeyUrl) */
80
- _context2.prev = 1;
78
+ _context2.next = 2;
79
+ return _solidLogic.store.fetcher.load(webId);
80
+ case 2:
81
81
  _context2.next = 4;
82
- return _solidLogic.store.fetcher.load(privateKeyUrl);
82
+ return (0, _cryptoKeyHelpers.pubKeyUrl)(webId);
83
83
  case 4:
84
- privateKey = _solidLogic.store.any(_solidLogic.store.sym(webId), _solidLogic.store.sym(_signature.CERT + 'PrivateKey'));
85
- return _context2.abrupt("return", privateKey === null || privateKey === void 0 ? void 0 : privateKey.value);
86
- case 8:
87
- _context2.prev = 8;
88
- _context2.t0 = _context2["catch"](1);
89
- if (!((_context2.t0 === null || _context2.t0 === void 0 ? void 0 : (_err$response = _context2.t0.response) === null || _err$response === void 0 ? void 0 : _err$response.status) === 404)) {
90
- _context2.next = 25;
84
+ publicKeyDoc = _context2.sent;
85
+ _context2.next = 7;
86
+ return (0, _cryptoKeyHelpers.privKeyUrl)(webId);
87
+ case 7:
88
+ privateKeyDoc = _context2.sent;
89
+ _context2.next = 10;
90
+ return (0, _cryptoKeyHelpers.publicKeyExists)(webId);
91
+ case 10:
92
+ publicKey = _context2.sent;
93
+ _context2.next = 13;
94
+ return (0, _cryptoKeyHelpers.privateKeyExists)(webId);
95
+ case 13:
96
+ privateKey = _context2.sent;
97
+ // is publicKey valid ?
98
+ validPublicKey = true;
99
+ if (privateKey && publicKey !== generatePublicKey(privateKey)) {
100
+ 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;
101
+ }
102
+
103
+ // create key pair or repair publicKey
104
+ if (!(!privateKey || !publicKey || !validPublicKey)) {
105
+ _context2.next = 34;
91
106
  break;
92
107
  }
93
- _context2.prev = 11;
94
- // create privateKey resource
95
- data = '';
96
- contentType = 'text/ttl';
97
- _context2.next = 16;
98
- return _solidLogic.store.fetcher.webOperation('PUT', privateKeyUrl, {
99
- data: data,
100
- contentType: contentType
101
- });
102
- case 16:
103
- response = _context2.sent;
104
- _context2.next = 23;
105
- break;
106
- case 19:
107
- _context2.prev = 19;
108
- _context2.t1 = _context2["catch"](11);
109
- debug.log('createIfNotExists doc FAILED: ' + privateKeyUrl + ': ' + _context2.t1);
110
- throw _context2.t1;
111
- case 23:
112
- delete _solidLogic.store.fetcher.requested[privateKeyUrl]; // delete cached 404 error
113
- return _context2.abrupt("return", undefined);
114
- case 25:
115
- debug.log('createIfNotExists doc FAILED: ' + privateKeyUrl + ': ' + _context2.t0);
116
- throw _context2.t0;
117
- case 27:
108
+ del = [];
109
+ add = []; // if (privateKey) del.push($rdf.st(webId, store.sym(CERT + 'PrivateKey'), $rdf.lit(privateKey), store.sym(privateKeyDoc)))
110
+ if (privateKey) {
111
+ _context2.next = 24;
112
+ break;
113
+ }
114
+ // add = []
115
+ privateKey = generatePrivateKey();
116
+ add = [$rdf.st(webId, _solidLogic.store.sym(_signature.CERT + 'PrivateKey'), $rdf.literal(privateKey), _solidLogic.store.sym(privateKeyDoc))];
117
+ _context2.next = 24;
118
+ return saveKey(privateKeyDoc, [], add, webId.uri);
119
+ case 24:
120
+ if (!(!publicKey || !validPublicKey)) {
121
+ _context2.next = 31;
122
+ break;
123
+ }
124
+ del = [];
125
+ // delete invalid public key
126
+ if (publicKey) {
127
+ del = [$rdf.st(webId, _solidLogic.store.sym(_signature.CERT + 'PublicKey'), $rdf.lit(publicKey), _solidLogic.store.sym(publicKeyDoc))];
128
+ debug.log(del);
129
+ }
130
+ // update new valid key
131
+ newPublicKey = generatePublicKey(privateKey);
132
+ add = [$rdf.st(webId, _solidLogic.store.sym(_signature.CERT + 'PublicKey'), $rdf.literal(newPublicKey), _solidLogic.store.sym(publicKeyDoc))];
133
+ _context2.next = 31;
134
+ return saveKey(publicKeyDoc, del, add);
135
+ case 31:
136
+ keyContainer = privateKeyDoc.substring(0, privateKeyDoc.lastIndexOf('/') + 1);
137
+ _context2.next = 34;
138
+ return setAcl(keyContainer, keyContainerAclBody(webId.uri));
139
+ case 34:
140
+ return _context2.abrupt("return", privateKey);
141
+ case 35:
118
142
  case "end":
119
143
  return _context2.stop();
120
144
  }
121
- }, _callee2, null, [[1, 8], [11, 19]]);
145
+ }, _callee2);
122
146
  }));
123
- return _privateKeyExists.apply(this, arguments);
124
- }
125
- function getPrivateKey(_x3) {
126
147
  return _getPrivateKey.apply(this, arguments);
127
148
  }
128
- function _getPrivateKey() {
129
- _getPrivateKey = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(webId) {
130
- var publicKeyUrl, privateKeyUrl, publicKey, privateKey, del, add;
149
+ var keyContainerAclBody = function keyContainerAclBody(me) {
150
+ var aclBody = "\n@prefix : <#>.\n@prefix acl: <http://www.w3.org/ns/auth/acl#>.\n@prefix foaf: <http://xmlns.com/foaf/0.1/>.\n@prefix key: <./>.\n\n:ReadWrite\n a acl:Authorization;\n acl:accessTo key:;\n acl:default key:;\n acl:agent <".concat(me, ">;\n acl:mode acl:Read, acl:Write.\n");
151
+ return aclBody;
152
+ };
153
+
154
+ /**
155
+ * Read only ACL
156
+ * @param keyDoc
157
+ * @param me
158
+ * @returns aclBody
159
+ */
160
+ var keyAclBody = function keyAclBody(keyDoc, me) {
161
+ var keyAgent = 'acl:agentClass foaf:Agent'; // publicKey
162
+ if (me !== null && me !== void 0 && me.length) keyAgent = "acl:agent <".concat(me, ">"); // privateKey
163
+ var aclBody = "\n@prefix foaf: <http://xmlns.com/foaf/0.1/>.\n@prefix acl: <http://www.w3.org/ns/auth/acl#>.\n<#Read>\n a acl:Authorization;\n ".concat(keyAgent, ";\n acl:accessTo <").concat(keyDoc.split('/').pop(), ">;\n acl:mode acl:Read.\n");
164
+ return aclBody;
165
+ };
166
+
167
+ /**
168
+ * set ACL
169
+ * @param keyDoc
170
+ * @param aclBody
171
+ */
172
+ function setAcl(_x3, _x4) {
173
+ return _setAcl.apply(this, arguments);
174
+ }
175
+ /**
176
+ * delete acl if keydoc exists
177
+ * create/edit keyDoc
178
+ * set keyDoc acl
179
+ */
180
+ function _setAcl() {
181
+ _setAcl = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(keyDoc, aclBody) {
182
+ var keyAclDoc, response, aclResponse;
131
183
  return _regenerator["default"].wrap(function _callee3$(_context3) {
132
184
  while (1) switch (_context3.prev = _context3.next) {
133
185
  case 0:
134
- /* const url = new URL(webId)
135
- url.hash = '' */
136
- /* const privateKeyUrl = url.protocol + '//' + url.host + '/profile/privateKey.ttl' */
137
- publicKeyUrl = pubKeyUrl(webId);
138
- privateKeyUrl = privKeyUrl(webId); // find publickey
139
- _context3.next = 4;
140
- return publicKeyExists(webId);
141
- case 4:
142
- publicKey = _context3.sent;
143
- _context3.next = 7;
144
- return privateKeyExists(webId);
145
- case 7:
146
- privateKey = _context3.sent;
147
- // debug.warn('privateKey ' + privateKey)
148
- if (privateKey && publicKey !== generatePublicKey(privateKey)) debug.warn('publicKey is not valid');
149
-
150
- // simulate new key pair
151
- /* const newPrivateKey = generatePrivateKey()
152
- const newPublicKey = generatePublicKey(newPrivateKey)
153
- debug.log('newPrivateKey ' + newPrivateKey)
154
- debug.log('newPublicKey ' + newPublicKey) */
155
-
156
- // create key pair
157
- if (!(!privateKey || !publicKey)) {
158
- _context3.next = 20;
186
+ _context3.next = 2;
187
+ return _solidLogic.store.fetcher.load(keyDoc);
188
+ case 2:
189
+ // FIXME: check the Why value on this quad:
190
+ debug.log(_solidLogic.store.statementsMatching(_solidLogic.store.sym(keyDoc), _solidLogic.store.sym('http://www.iana.org/assignments/link-relations/acl')));
191
+ keyAclDoc = _solidLogic.store.any(_solidLogic.store.sym(keyDoc), _solidLogic.store.sym('http://www.iana.org/assignments/link-relations/acl'));
192
+ if (keyAclDoc) {
193
+ _context3.next = 6;
159
194
  break;
160
195
  }
161
- del = [];
162
- add = [];
163
- if (privateKey) del.push($rdf.st($rdf.sym(webId), $rdf.sym(_signature.CERT + 'PrivateKey'), $rdf.lit(privateKey), $rdf.sym(privateKeyUrl)));
164
- if (publicKey) del.push($rdf.st($rdf.sym(webId), $rdf.sym(_signature.CERT + 'PublicKey'), $rdf.lit(publicKey), $rdf.sym(publicKeyUrl)));
165
- privateKey = generatePrivateKey();
166
- publicKey = generatePublicKey(privateKey);
167
- /* debug.log('newPrivateKey-1 ' + privateKey)
168
- debug.log('newPublicKey-1 ' + publicKey) */
169
- add.push($rdf.st($rdf.sym(webId), $rdf.sym(_signature.CERT + 'PrivateKey'), $rdf.literal(privateKey), $rdf.sym(privateKeyUrl)));
170
- add.push($rdf.st($rdf.sym(webId), $rdf.sym(_signature.CERT + 'PublicKey'), $rdf.literal(publicKey), $rdf.sym(publicKeyUrl)));
196
+ throw new Error('Key ACL doc not found!');
197
+ case 6:
198
+ _context3.prev = 6;
199
+ _context3.next = 9;
200
+ return _solidLogic.store.fetcher.webOperation('DELETE', keyAclDoc.value);
201
+ case 9:
202
+ response = _context3.sent;
203
+ // this may fail if webId is not an owner
204
+ debug.log('delete ' + keyAclDoc.value + ' ' + response.status); // should test 404 and 2xx
205
+ _context3.next = 18;
206
+ break;
207
+ case 13:
208
+ _context3.prev = 13;
209
+ _context3.t0 = _context3["catch"](6);
210
+ if (!(_context3.t0.response.status !== 404)) {
211
+ _context3.next = 17;
212
+ break;
213
+ }
214
+ throw new Error(_context3.t0);
215
+ case 17:
216
+ debug.log('delete ' + keyAclDoc.value + ' ' + _context3.t0.response.status); // should test 404 and 2xx
217
+ case 18:
171
218
  _context3.next = 20;
172
- return _solidLogic.store.updater.updateMany(del, add);
219
+ return _solidLogic.store.fetcher.webOperation('PUT', keyAclDoc.value, {
220
+ data: aclBody,
221
+ contentType: 'text/turtle'
222
+ });
173
223
  case 20:
174
- return _context3.abrupt("return", privateKey);
224
+ aclResponse = _context3.sent;
175
225
  case 21:
176
226
  case "end":
177
227
  return _context3.stop();
178
228
  }
179
- }, _callee3);
229
+ }, _callee3, null, [[6, 13]]);
180
230
  }));
181
- return _getPrivateKey.apply(this, arguments);
231
+ return _setAcl.apply(this, arguments);
232
+ }
233
+ function saveKey(_x5, _x6, _x7) {
234
+ return _saveKey.apply(this, arguments);
235
+ }
236
+ function _saveKey() {
237
+ _saveKey = (0, _asyncToGenerator2["default"])(function (keyDoc, del, add) {
238
+ var me = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '';
239
+ return /*#__PURE__*/_regenerator["default"].mark(function _callee4() {
240
+ var keyAclDoc, response, aclBody;
241
+ return _regenerator["default"].wrap(function _callee4$(_context4) {
242
+ while (1) switch (_context4.prev = _context4.next) {
243
+ case 0:
244
+ _context4.next = 2;
245
+ return _solidLogic.store.fetcher.load(keyDoc);
246
+ case 2:
247
+ _context4.prev = 2;
248
+ // get keyAcldoc
249
+ keyAclDoc = _solidLogic.store.any(_solidLogic.store.sym(keyDoc), _solidLogic.store.sym('http://www.iana.org/assignments/link-relations/acl'));
250
+ if (!keyAclDoc) {
251
+ _context4.next = 17;
252
+ break;
253
+ }
254
+ _context4.prev = 5;
255
+ _context4.next = 8;
256
+ return _solidLogic.store.fetcher.webOperation('DELETE', keyAclDoc.value);
257
+ case 8:
258
+ response = _context4.sent;
259
+ // this may fail if webId is not an owner
260
+ debug.log('delete ' + keyAclDoc.value + ' ' + response.status); // should test 404 and 2xx
261
+ _context4.next = 17;
262
+ break;
263
+ case 12:
264
+ _context4.prev = 12;
265
+ _context4.t0 = _context4["catch"](5);
266
+ if (!(_context4.t0.response.status !== 404)) {
267
+ _context4.next = 16;
268
+ break;
269
+ }
270
+ throw new Error(_context4.t0);
271
+ case 16:
272
+ debug.log('delete ' + keyAclDoc.value + ' ' + _context4.t0.response.status); // should test 404 and 2xx
273
+ case 17:
274
+ _context4.next = 19;
275
+ return _solidLogic.store.updater.updateMany(del, add);
276
+ case 19:
277
+ // or a promise store.updater.update ?
278
+ // create READ only ACL
279
+ aclBody = keyAclBody(keyDoc, me);
280
+ _context4.next = 22;
281
+ return setAcl(keyDoc, aclBody);
282
+ case 22:
283
+ _context4.next = 27;
284
+ break;
285
+ case 24:
286
+ _context4.prev = 24;
287
+ _context4.t1 = _context4["catch"](2);
288
+ throw new Error(_context4.t1);
289
+ case 27:
290
+ case "end":
291
+ return _context4.stop();
292
+ }
293
+ }, _callee4, null, [[2, 24], [5, 12]]);
294
+ })();
295
+ });
296
+ return _saveKey.apply(this, arguments);
182
297
  }
183
298
  //# sourceMappingURL=keys.js.map