solid-ui 2.6.1-d631dfca → 2.6.1-dc6afe0
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.
- package/LICENSE.md +3 -1
- package/README.md +85 -26
- package/dist/acl/access-controller.js +293 -0
- package/dist/acl/access-controller.js.map +1 -0
- package/dist/acl/access-groups.js +372 -0
- package/dist/acl/access-groups.js.map +1 -0
- package/dist/acl/acl-control.js +217 -0
- package/dist/acl/acl-control.js.map +1 -0
- package/dist/acl/acl.js +550 -0
- package/dist/acl/acl.js.map +1 -0
- package/dist/acl/add-agent-buttons.js +260 -0
- package/dist/acl/add-agent-buttons.js.map +1 -0
- package/dist/acl/index.js +35 -0
- package/dist/acl/index.js.map +1 -0
- package/dist/acl/types.js +7 -0
- package/dist/acl/types.js.map +1 -0
- package/{lib → dist}/chat/keys.d.ts +1 -1
- package/{lib → dist}/chat/keys.d.ts.map +1 -1
- package/dist/chat/keys.js +148 -0
- package/dist/chat/keys.js.map +1 -0
- package/dist/chat/signature.js +71 -0
- package/dist/chat/signature.js.map +1 -0
- package/dist/create/create.js +288 -0
- package/dist/create/create.js.map +1 -0
- package/dist/create/index.js +8 -0
- package/dist/create/index.js.map +1 -0
- package/dist/create/types.js +3 -0
- package/dist/create/types.js.map +1 -0
- package/dist/debug.js +23 -0
- package/dist/debug.js.map +1 -0
- package/dist/footer/index.js +72 -0
- package/dist/footer/index.js.map +1 -0
- package/dist/header/empty-profile.js +14 -0
- package/dist/header/empty-profile.js.map +1 -0
- package/dist/header/index.js +305 -0
- package/dist/header/index.js.map +1 -0
- package/dist/iconBase.js +40 -0
- package/dist/iconBase.js.map +1 -0
- package/dist/icons/solid_logo.js.map +1 -0
- package/{lib → dist}/index.d.ts +7 -9
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +162 -0
- package/dist/index.js.map +1 -0
- package/{lib → dist}/log.js +85 -99
- package/dist/log.js.map +1 -0
- package/dist/login/login.js +910 -0
- package/dist/login/login.js.map +1 -0
- package/dist/matrix/index.js +8 -0
- package/dist/matrix/index.js.map +1 -0
- package/dist/matrix/matrix.js +253 -0
- package/dist/matrix/matrix.js.map +1 -0
- package/dist/matrix/types.js +3 -0
- package/dist/matrix/types.js.map +1 -0
- package/dist/media/index.js +9 -0
- package/dist/media/index.js.map +1 -0
- package/dist/media/media-capture.js +198 -0
- package/dist/media/media-capture.js.map +1 -0
- package/dist/pad.js +795 -0
- package/dist/pad.js.map +1 -0
- package/dist/participation.js +228 -0
- package/dist/participation.js.map +1 -0
- package/dist/solid-ui.esm.js +25542 -0
- package/dist/solid-ui.esm.js.map +1 -0
- package/dist/solid-ui.esm.min.js +43 -0
- package/dist/solid-ui.esm.min.js.map +1 -0
- package/dist/solid-ui.js +23485 -68926
- package/dist/solid-ui.js.map +1 -1
- package/dist/solid-ui.min.js +40 -2
- package/dist/solid-ui.min.js.map +1 -1
- package/dist/tabs.js +398 -0
- package/dist/tabs.js.map +1 -0
- package/dist/utils/headerFooterHelpers.js +122 -0
- package/dist/utils/headerFooterHelpers.js.map +1 -0
- package/{lib → dist}/utils/keyHelpers/accessData.d.ts +3 -3
- package/{lib → dist}/utils/keyHelpers/accessData.d.ts.map +1 -1
- package/dist/utils/keyHelpers/accessData.js +108 -0
- package/dist/utils/keyHelpers/accessData.js.map +1 -0
- package/dist/utils/keyHelpers/acl.js +112 -0
- package/dist/utils/keyHelpers/acl.js.map +1 -0
- package/{lib → dist}/utils/keyHelpers/otherHelpers.d.ts +1 -1
- package/{lib → dist}/utils/keyHelpers/otherHelpers.d.ts.map +1 -1
- package/dist/utils/keyHelpers/otherHelpers.js +19 -0
- package/dist/utils/keyHelpers/otherHelpers.js.map +1 -0
- package/dist/utils/label.js +150 -0
- package/dist/utils/label.js.map +1 -0
- package/dist/versionInfo.js +33 -0
- package/dist/versionInfo.js.map +1 -0
- package/dist/widgets/buttons/iconLinks.js +49 -0
- package/dist/widgets/buttons/iconLinks.js.map +1 -0
- package/dist/widgets/buttons.js +1355 -0
- package/dist/widgets/buttons.js.map +1 -0
- package/dist/widgets/error.js +42 -0
- package/dist/widgets/error.js.map +1 -0
- package/dist/widgets/forms/autocomplete/autocompleteBar.js +162 -0
- package/dist/widgets/forms/autocomplete/autocompleteBar.js.map +1 -0
- package/dist/widgets/forms/autocomplete/autocompleteField.js +235 -0
- package/dist/widgets/forms/autocomplete/autocompleteField.js.map +1 -0
- package/dist/widgets/forms/autocomplete/autocompletePicker.js +296 -0
- package/dist/widgets/forms/autocomplete/autocompletePicker.js.map +1 -0
- package/dist/widgets/forms/autocomplete/language.js +147 -0
- package/dist/widgets/forms/autocomplete/language.js.map +1 -0
- package/{lib → dist}/widgets/forms/autocomplete/publicData.d.ts +3 -3
- package/dist/widgets/forms/autocomplete/publicData.d.ts.map +1 -0
- package/dist/widgets/forms/autocomplete/publicData.js +507 -0
- package/dist/widgets/forms/autocomplete/publicData.js.map +1 -0
- package/dist/widgets/forms/basic.js +250 -0
- package/dist/widgets/forms/basic.js.map +1 -0
- package/dist/widgets/forms/comment.js +52 -0
- package/dist/widgets/forms/comment.js.map +1 -0
- package/dist/widgets/forms/fieldFunction.js +49 -0
- package/dist/widgets/forms/fieldFunction.js.map +1 -0
- package/dist/widgets/forms/fieldParams.js +95 -0
- package/dist/widgets/forms/fieldParams.js.map +1 -0
- package/dist/widgets/forms/formStyle.js +43 -0
- package/dist/widgets/forms/formStyle.js.map +1 -0
- package/{lib → dist}/widgets/widgetHelpers.d.ts.map +1 -1
- package/{lib → dist}/widgets/widgetHelpers.js +19 -24
- package/dist/widgets/widgetHelpers.js.map +1 -0
- package/package.json +44 -47
- package/dist/789.solid-ui.min.js +0 -1
- package/dist/841.solid-ui.min.js +0 -3
- package/dist/841.solid-ui.min.js.LICENSE.txt +0 -58
- package/dist/841.solid-ui.min.js.map +0 -1
- package/dist/_2b19.solid-ui.js +0 -14
- package/dist/_2b19.solid-ui.js.map +0 -1
- package/dist/index.html +0 -1
- package/dist/solid-ui.min.js.LICENSE.txt +0 -57
- package/dist/vendors-node_modules_jsonld_lib_jsonld_js.solid-ui.js +0 -12247
- package/dist/vendors-node_modules_jsonld_lib_jsonld_js.solid-ui.js.map +0 -1
- package/lib/acl/access-controller.js +0 -391
- package/lib/acl/access-controller.js.map +0 -1
- package/lib/acl/access-groups.js +0 -507
- package/lib/acl/access-groups.js.map +0 -1
- package/lib/acl/acl-control.js +0 -237
- package/lib/acl/acl-control.js.map +0 -1
- package/lib/acl/acl.js +0 -517
- package/lib/acl/acl.js.map +0 -1
- package/lib/acl/add-agent-buttons.js +0 -434
- package/lib/acl/add-agent-buttons.js.map +0 -1
- package/lib/acl/index.js +0 -39
- package/lib/acl/index.js.map +0 -1
- package/lib/acl/types.js +0 -6
- package/lib/acl/types.js.map +0 -1
- package/lib/chat/bookmarks.js +0 -303
- package/lib/chat/bookmarks.js.map +0 -1
- package/lib/chat/chatLogic.js +0 -420
- package/lib/chat/chatLogic.js.map +0 -1
- package/lib/chat/dateFolder.js +0 -328
- package/lib/chat/dateFolder.js.map +0 -1
- package/lib/chat/infinite.js +0 -994
- package/lib/chat/infinite.js.map +0 -1
- package/lib/chat/keys.js +0 -232
- package/lib/chat/keys.js.map +0 -1
- package/lib/chat/message.js +0 -715
- package/lib/chat/message.js.map +0 -1
- package/lib/chat/messageTools.js +0 -538
- package/lib/chat/messageTools.js.map +0 -1
- package/lib/chat/signature.js +0 -109
- package/lib/chat/signature.js.map +0 -1
- package/lib/chat/thread.js +0 -535
- package/lib/chat/thread.js.map +0 -1
- package/lib/create/create.js +0 -242
- package/lib/create/create.js.map +0 -1
- package/lib/create/index.js +0 -11
- package/lib/create/index.js.map +0 -1
- package/lib/create/types.js +0 -6
- package/lib/create/types.js.map +0 -1
- package/lib/debug.js +0 -30
- package/lib/debug.js.map +0 -1
- package/lib/folders.js +0 -132
- package/lib/folders.js.map +0 -1
- package/lib/footer/index.js +0 -123
- package/lib/footer/index.js.map +0 -1
- package/lib/header/empty-profile.js +0 -8
- package/lib/header/empty-profile.js.map +0 -1
- package/lib/header/index.js +0 -375
- package/lib/header/index.js.map +0 -1
- package/lib/iconBase.js +0 -44
- package/lib/iconBase.js.map +0 -1
- package/lib/icons/solid_logo.js.map +0 -1
- package/lib/index.d.ts.map +0 -1
- package/lib/index.js +0 -223
- package/lib/index.js.map +0 -1
- package/lib/log.js.map +0 -1
- package/lib/login/login.js +0 -1241
- package/lib/login/login.js.map +0 -1
- package/lib/matrix/index.js +0 -11
- package/lib/matrix/index.js.map +0 -1
- package/lib/matrix/matrix.js +0 -216
- package/lib/matrix/matrix.js.map +0 -1
- package/lib/matrix/types.js +0 -6
- package/lib/matrix/types.js.map +0 -1
- package/lib/media/index.js +0 -12
- package/lib/media/index.js.map +0 -1
- package/lib/media/media-capture.js +0 -194
- package/lib/media/media-capture.js.map +0 -1
- package/lib/messageArea.js +0 -319
- package/lib/messageArea.js.map +0 -1
- package/lib/noun_Camera_1618446_000000.js +0 -8
- package/lib/noun_Camera_1618446_000000.js.map +0 -1
- package/lib/ns.js +0 -17
- package/lib/ns.js.map +0 -1
- package/lib/pad.js +0 -805
- package/lib/pad.js.map +0 -1
- package/lib/participation.js +0 -219
- package/lib/participation.js.map +0 -1
- package/lib/preferences.js +0 -215
- package/lib/preferences.js.map +0 -1
- package/lib/signup/config-default.js +0 -43
- package/lib/signup/config-default.js.map +0 -1
- package/lib/signup/signup.js +0 -74
- package/lib/signup/signup.js.map +0 -1
- package/lib/stories/decorators.js +0 -10
- package/lib/stories/decorators.js.map +0 -1
- package/lib/style.js +0 -158
- package/lib/style.js.map +0 -1
- package/lib/styleConstants.js +0 -35
- package/lib/styleConstants.js.map +0 -1
- package/lib/style_multiSelect.js +0 -62
- package/lib/style_multiSelect.js.map +0 -1
- package/lib/table.js +0 -1573
- package/lib/table.js.map +0 -1
- package/lib/tabs.js +0 -448
- package/lib/tabs.js.map +0 -1
- package/lib/typings.d.js +0 -2
- package/lib/typings.d.js.map +0 -1
- package/lib/utils/headerFooterHelpers.js +0 -165
- package/lib/utils/headerFooterHelpers.js.map +0 -1
- package/lib/utils/index.js +0 -527
- package/lib/utils/index.js.map +0 -1
- package/lib/utils/keyHelpers/accessData.js +0 -131
- package/lib/utils/keyHelpers/accessData.js.map +0 -1
- package/lib/utils/keyHelpers/acl.js +0 -90
- package/lib/utils/keyHelpers/acl.js.map +0 -1
- package/lib/utils/keyHelpers/otherHelpers.js +0 -21
- package/lib/utils/keyHelpers/otherHelpers.js.map +0 -1
- package/lib/utils/label.js +0 -103
- package/lib/utils/label.js.map +0 -1
- package/lib/versionInfo.d.ts +0 -32
- package/lib/versionInfo.d.ts.map +0 -1
- package/lib/versionInfo.js +0 -37
- package/lib/versionInfo.js.map +0 -1
- package/lib/widgets/buttons/iconLinks.js +0 -53
- package/lib/widgets/buttons/iconLinks.js.map +0 -1
- package/lib/widgets/buttons.js +0 -1306
- package/lib/widgets/buttons.js.map +0 -1
- package/lib/widgets/dragAndDrop.js +0 -194
- package/lib/widgets/dragAndDrop.js.map +0 -1
- package/lib/widgets/error.js +0 -46
- package/lib/widgets/error.js.map +0 -1
- package/lib/widgets/forms/autocomplete/autocompleteBar.js +0 -271
- package/lib/widgets/forms/autocomplete/autocompleteBar.js.map +0 -1
- package/lib/widgets/forms/autocomplete/autocompleteField.js +0 -258
- package/lib/widgets/forms/autocomplete/autocompleteField.js.map +0 -1
- package/lib/widgets/forms/autocomplete/autocompletePicker.js +0 -436
- package/lib/widgets/forms/autocomplete/autocompletePicker.js.map +0 -1
- package/lib/widgets/forms/autocomplete/language.js +0 -189
- package/lib/widgets/forms/autocomplete/language.js.map +0 -1
- package/lib/widgets/forms/autocomplete/publicData.d.ts.map +0 -1
- package/lib/widgets/forms/autocomplete/publicData.js +0 -636
- package/lib/widgets/forms/autocomplete/publicData.js.map +0 -1
- package/lib/widgets/forms/basic.js +0 -254
- package/lib/widgets/forms/basic.js.map +0 -1
- package/lib/widgets/forms/comment.js +0 -54
- package/lib/widgets/forms/comment.js.map +0 -1
- package/lib/widgets/forms/fieldFunction.js +0 -52
- package/lib/widgets/forms/fieldFunction.js.map +0 -1
- package/lib/widgets/forms/fieldParams.js +0 -77
- package/lib/widgets/forms/fieldParams.js.map +0 -1
- package/lib/widgets/forms/formStyle.js +0 -44
- package/lib/widgets/forms/formStyle.js.map +0 -1
- package/lib/widgets/forms.js +0 -2045
- package/lib/widgets/forms.js.map +0 -1
- package/lib/widgets/index.js +0 -110
- package/lib/widgets/index.js.map +0 -1
- package/lib/widgets/multiSelect.js +0 -658
- package/lib/widgets/multiSelect.js.map +0 -1
- package/lib/widgets/peoplePicker.js +0 -467
- package/lib/widgets/peoplePicker.js.map +0 -1
- package/lib/widgets/widgetHelpers.js.map +0 -1
- /package/{lib → dist}/acl/access-controller.d.ts +0 -0
- /package/{lib → dist}/acl/access-controller.d.ts.map +0 -0
- /package/{lib → dist}/acl/access-groups.d.ts +0 -0
- /package/{lib → dist}/acl/access-groups.d.ts.map +0 -0
- /package/{lib → dist}/acl/acl-control.d.ts +0 -0
- /package/{lib → dist}/acl/acl-control.d.ts.map +0 -0
- /package/{lib → dist}/acl/acl.d.ts +0 -0
- /package/{lib → dist}/acl/acl.d.ts.map +0 -0
- /package/{lib → dist}/acl/add-agent-buttons.d.ts +0 -0
- /package/{lib → dist}/acl/add-agent-buttons.d.ts.map +0 -0
- /package/{lib → dist}/acl/index.d.ts +0 -0
- /package/{lib → dist}/acl/index.d.ts.map +0 -0
- /package/{lib → dist}/acl/types.d.ts +0 -0
- /package/{lib → dist}/acl/types.d.ts.map +0 -0
- /package/{lib → dist}/chat/signature.d.ts +0 -0
- /package/{lib → dist}/chat/signature.d.ts.map +0 -0
- /package/{lib → dist}/create/create.d.ts +0 -0
- /package/{lib → dist}/create/create.d.ts.map +0 -0
- /package/{lib → dist}/create/index.d.ts +0 -0
- /package/{lib → dist}/create/index.d.ts.map +0 -0
- /package/{lib → dist}/create/types.d.ts +0 -0
- /package/{lib → dist}/create/types.d.ts.map +0 -0
- /package/{lib → dist}/debug.d.ts +0 -0
- /package/{lib → dist}/debug.d.ts.map +0 -0
- /package/{lib → dist}/footer/index.d.ts +0 -0
- /package/{lib → dist}/footer/index.d.ts.map +0 -0
- /package/{lib → dist}/header/empty-profile.d.ts +0 -0
- /package/{lib → dist}/header/empty-profile.d.ts.map +0 -0
- /package/{lib → dist}/header/index.d.ts +0 -0
- /package/{lib → dist}/header/index.d.ts.map +0 -0
- /package/{lib → dist}/iconBase.d.ts +0 -0
- /package/{lib → dist}/iconBase.d.ts.map +0 -0
- /package/{lib → dist}/icons/solid_logo.d.ts +0 -0
- /package/{lib → dist}/icons/solid_logo.d.ts.map +0 -0
- /package/{lib → dist}/icons/solid_logo.js +0 -0
- /package/{lib → dist}/log.d.ts +0 -0
- /package/{lib → dist}/log.d.ts.map +0 -0
- /package/{lib → dist}/login/login.d.ts +0 -0
- /package/{lib → dist}/login/login.d.ts.map +0 -0
- /package/{lib → dist}/matrix/index.d.ts +0 -0
- /package/{lib → dist}/matrix/index.d.ts.map +0 -0
- /package/{lib → dist}/matrix/matrix.d.ts +0 -0
- /package/{lib → dist}/matrix/matrix.d.ts.map +0 -0
- /package/{lib → dist}/matrix/types.d.ts +0 -0
- /package/{lib → dist}/matrix/types.d.ts.map +0 -0
- /package/{lib → dist}/media/index.d.ts +0 -0
- /package/{lib → dist}/media/index.d.ts.map +0 -0
- /package/{lib → dist}/media/media-capture.d.ts +0 -0
- /package/{lib → dist}/media/media-capture.d.ts.map +0 -0
- /package/{lib → dist}/pad.d.ts +0 -0
- /package/{lib → dist}/pad.d.ts.map +0 -0
- /package/{lib → dist}/participation.d.ts +0 -0
- /package/{lib → dist}/participation.d.ts.map +0 -0
- /package/{lib → dist}/tabs.d.ts +0 -0
- /package/{lib → dist}/tabs.d.ts.map +0 -0
- /package/{lib → dist}/utils/headerFooterHelpers.d.ts +0 -0
- /package/{lib → dist}/utils/headerFooterHelpers.d.ts.map +0 -0
- /package/{lib → dist}/utils/keyHelpers/acl.d.ts +0 -0
- /package/{lib → dist}/utils/keyHelpers/acl.d.ts.map +0 -0
- /package/{lib → dist}/utils/label.d.ts +0 -0
- /package/{lib → dist}/utils/label.d.ts.map +0 -0
- /package/{lib → dist}/widgets/buttons/iconLinks.d.ts +0 -0
- /package/{lib → dist}/widgets/buttons/iconLinks.d.ts.map +0 -0
- /package/{lib → dist}/widgets/buttons.d.ts +0 -0
- /package/{lib → dist}/widgets/buttons.d.ts.map +0 -0
- /package/{lib → dist}/widgets/error.d.ts +0 -0
- /package/{lib → dist}/widgets/error.d.ts.map +0 -0
- /package/{lib → dist}/widgets/forms/autocomplete/autocompleteBar.d.ts +0 -0
- /package/{lib → dist}/widgets/forms/autocomplete/autocompleteBar.d.ts.map +0 -0
- /package/{lib → dist}/widgets/forms/autocomplete/autocompleteField.d.ts +0 -0
- /package/{lib → dist}/widgets/forms/autocomplete/autocompleteField.d.ts.map +0 -0
- /package/{lib → dist}/widgets/forms/autocomplete/autocompletePicker.d.ts +0 -0
- /package/{lib → dist}/widgets/forms/autocomplete/autocompletePicker.d.ts.map +0 -0
- /package/{lib → dist}/widgets/forms/autocomplete/language.d.ts +0 -0
- /package/{lib → dist}/widgets/forms/autocomplete/language.d.ts.map +0 -0
- /package/{lib → dist}/widgets/forms/basic.d.ts +0 -0
- /package/{lib → dist}/widgets/forms/basic.d.ts.map +0 -0
- /package/{lib → dist}/widgets/forms/comment.d.ts +0 -0
- /package/{lib → dist}/widgets/forms/comment.d.ts.map +0 -0
- /package/{lib → dist}/widgets/forms/fieldFunction.d.ts +0 -0
- /package/{lib → dist}/widgets/forms/fieldFunction.d.ts.map +0 -0
- /package/{lib → dist}/widgets/forms/fieldParams.d.ts +0 -0
- /package/{lib → dist}/widgets/forms/fieldParams.d.ts.map +0 -0
- /package/{lib → dist}/widgets/forms/formStyle.d.ts +0 -0
- /package/{lib → dist}/widgets/forms/formStyle.d.ts.map +0 -0
- /package/{lib → dist}/widgets/widgetHelpers.d.ts +0 -0
package/lib/acl/acl.js
DELETED
|
@@ -1,517 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
5
|
-
Object.defineProperty(exports, "__esModule", {
|
|
6
|
-
value: true
|
|
7
|
-
});
|
|
8
|
-
exports.ACLToString = ACLToString;
|
|
9
|
-
exports.ACLbyCombination = ACLbyCombination;
|
|
10
|
-
exports.ACLunion = ACLunion;
|
|
11
|
-
exports.adoptACLDefault = adoptACLDefault;
|
|
12
|
-
exports.comboToString = comboToString;
|
|
13
|
-
exports.fixIndividualACL = fixIndividualACL;
|
|
14
|
-
exports.fixIndividualCardACL = fixIndividualCardACL;
|
|
15
|
-
exports.getACL = getACL;
|
|
16
|
-
exports.getACLorDefault = getACLorDefault;
|
|
17
|
-
exports.getProspectiveHolder = getProspectiveHolder;
|
|
18
|
-
exports.loadUnionACL = loadUnionACL;
|
|
19
|
-
exports.makeACLGraph = makeACLGraph;
|
|
20
|
-
exports.makeACLGraphbyCombo = makeACLGraphbyCombo;
|
|
21
|
-
exports.makeACLString = makeACLString;
|
|
22
|
-
exports.putACLObject = putACLObject;
|
|
23
|
-
exports.putACLbyCombo = putACLbyCombo;
|
|
24
|
-
exports.readACL = readACL;
|
|
25
|
-
exports.sameACL = sameACL;
|
|
26
|
-
exports.setACL = setACL;
|
|
27
|
-
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
28
|
-
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
29
|
-
var ns = _interopRequireWildcard(require("../ns"));
|
|
30
|
-
var _solidLogic = require("solid-logic");
|
|
31
|
-
var utils = _interopRequireWildcard(require("../utils"));
|
|
32
|
-
var debug = _interopRequireWildcard(require("../debug"));
|
|
33
|
-
var _rdflib = require("rdflib");
|
|
34
|
-
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
35
|
-
/**
|
|
36
|
-
* Non-UI functions for access control.
|
|
37
|
-
* See https://github.com/solidos/web-access-control-spec
|
|
38
|
-
* for the spec that defines how ACL documents work.
|
|
39
|
-
* @packageDocumentation
|
|
40
|
-
*/
|
|
41
|
-
|
|
42
|
-
var kb = _solidLogic.solidLogicSingleton.store;
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* Take the "default" ACL and convert it into the equivalent ACL
|
|
46
|
-
* which the resource would have had. Return it as a new separate store.
|
|
47
|
-
* The "defaultForNew" predicate is also accepted, as a deprecated
|
|
48
|
-
* synonym for "default".
|
|
49
|
-
*/
|
|
50
|
-
function adoptACLDefault(doc, aclDoc, defaultResource, defaultACLDoc) {
|
|
51
|
-
var ACL = ns.acl;
|
|
52
|
-
var isContainer = doc.uri.slice(-1) === '/'; // Give default for all directories
|
|
53
|
-
|
|
54
|
-
var defaults = kb.each(undefined, ACL('default'), defaultResource, defaultACLDoc).concat(kb.each(undefined, ACL('defaultForNew'), defaultResource, defaultACLDoc));
|
|
55
|
-
var proposed = defaults.reduce(function (accumulatedStatements, da) {
|
|
56
|
-
return accumulatedStatements.concat(kb.statementsMatching(da, ns.rdf('type'), ACL('Authorization'), defaultACLDoc)).concat(kb.statementsMatching(da, ACL('agent'), undefined, defaultACLDoc)).concat(kb.statementsMatching(da, ACL('agentClass'), undefined, defaultACLDoc)).concat(kb.statementsMatching(da, ACL('agentGroup'), undefined, defaultACLDoc)).concat(kb.statementsMatching(da, ACL('origin'), undefined, defaultACLDoc)).concat(kb.statementsMatching(da, ACL('originClass'), undefined, defaultACLDoc)).concat(kb.statementsMatching(da, ACL('mode'), undefined, defaultACLDoc)).concat((0, _rdflib.st)(da, ACL('accessTo'), doc, defaultACLDoc)).concat(isContainer ? (0, _rdflib.st)(da, ACL('default'), doc, defaultACLDoc) : []);
|
|
57
|
-
}, []);
|
|
58
|
-
var kb2 = (0, _rdflib.graph)(); // Potential - derived is kept apart
|
|
59
|
-
proposed.forEach(function (st) {
|
|
60
|
-
return kb2.add(move(st.subject), move(st.predicate), move(st.object), (0, _rdflib.sym)(aclDoc.uri));
|
|
61
|
-
});
|
|
62
|
-
return kb2;
|
|
63
|
-
function move(symbol) {
|
|
64
|
-
var y = defaultACLDoc.uri.length; // The default ACL file
|
|
65
|
-
return (0, _rdflib.sym)(symbol.uri.slice(0, y) === defaultACLDoc.uri ? aclDoc.uri + symbol.uri.slice(y) : symbol.uri);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
/**
|
|
70
|
-
* Read and canonicalize the ACL for x in aclDoc
|
|
71
|
-
*
|
|
72
|
-
* Accumulate the access rights which each agent or class has
|
|
73
|
-
*/
|
|
74
|
-
function readACL(doc, aclDoc) {
|
|
75
|
-
var kb2 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : kb;
|
|
76
|
-
var getDefaults = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
|
|
77
|
-
var auths = getDefaults ? getDefaultsFallback(kb2, ns) : kb2.each(undefined, ns.acl('accessTo'), doc);
|
|
78
|
-
var ACL = ns.acl;
|
|
79
|
-
var ac = {
|
|
80
|
-
agent: {},
|
|
81
|
-
agentClass: {},
|
|
82
|
-
agentGroup: {},
|
|
83
|
-
origin: {},
|
|
84
|
-
originClass: {}
|
|
85
|
-
};
|
|
86
|
-
Object.keys(ac).forEach(function (pred) {
|
|
87
|
-
auths.forEach(function (a) {
|
|
88
|
-
kb2.each(a, ACL('mode')).forEach(function (mode) {
|
|
89
|
-
kb2.each(a, ACL(pred)).forEach(function (agent) {
|
|
90
|
-
ac[pred][agent.uri] = ac[pred][agent.uri] || {};
|
|
91
|
-
ac[pred][agent.uri][mode.uri] = a; // could be "true" but leave pointer just in case
|
|
92
|
-
});
|
|
93
|
-
});
|
|
94
|
-
});
|
|
95
|
-
});
|
|
96
|
-
return ac;
|
|
97
|
-
function getDefaultsFallback(kb, ns) {
|
|
98
|
-
return kb.each(undefined, ns.acl('default'), doc).concat(kb.each(undefined, ns.acl('defaultForNew'), doc));
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
/**
|
|
103
|
-
* Compare two ACLs
|
|
104
|
-
*/
|
|
105
|
-
function sameACL(a, b) {
|
|
106
|
-
var contains = function contains(a, b) {
|
|
107
|
-
for (var pred in {
|
|
108
|
-
agent: true,
|
|
109
|
-
agentClass: true,
|
|
110
|
-
agentGroup: true,
|
|
111
|
-
origin: true,
|
|
112
|
-
originClass: true
|
|
113
|
-
}) {
|
|
114
|
-
if (a[pred]) {
|
|
115
|
-
for (var agent in a[pred]) {
|
|
116
|
-
for (var mode in a[pred][agent]) {
|
|
117
|
-
if (!b[pred][agent] || !b[pred][agent][mode]) {
|
|
118
|
-
return false;
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
return true;
|
|
125
|
-
};
|
|
126
|
-
return contains(a, b) && contains(b, a);
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
/**
|
|
130
|
-
* Union N ACLs
|
|
131
|
-
*/
|
|
132
|
-
function ACLunion(list) {
|
|
133
|
-
var b = list[0];
|
|
134
|
-
var a, ag;
|
|
135
|
-
var _loop = function _loop(k) {
|
|
136
|
-
;
|
|
137
|
-
['agent', 'agentClass', 'agentGroup', 'origin', 'originClass'].forEach(function (pred) {
|
|
138
|
-
a = list[k];
|
|
139
|
-
if (a[pred]) {
|
|
140
|
-
for (ag in a[pred]) {
|
|
141
|
-
for (var mode in a[pred][ag]) {
|
|
142
|
-
if (!b[pred][ag]) b[pred][ag] = [];
|
|
143
|
-
b[pred][ag][mode] = true;
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
});
|
|
148
|
-
};
|
|
149
|
-
for (var k = 1; k < list.length; k++) {
|
|
150
|
-
_loop(k);
|
|
151
|
-
}
|
|
152
|
-
return b;
|
|
153
|
-
}
|
|
154
|
-
/**
|
|
155
|
-
* Merge ACLs lists from things to form union
|
|
156
|
-
*/
|
|
157
|
-
function loadUnionACL(subjectList, callbackFunction) {
|
|
158
|
-
var aclList = [];
|
|
159
|
-
var _doList = function doList(list) {
|
|
160
|
-
if (list.length) {
|
|
161
|
-
var doc = list.shift().doc();
|
|
162
|
-
getACLorDefault(doc, function (ok, p2, targetDoc, targetACLDoc, defaultHolder, defaultACLDoc) {
|
|
163
|
-
var defa = !p2;
|
|
164
|
-
if (!ok || !defaultHolder || !defaultACLDoc) return callbackFunction(ok, targetACLDoc);
|
|
165
|
-
var acl = defa ? readACL(defaultHolder, defaultACLDoc) : readACL(targetDoc, targetACLDoc);
|
|
166
|
-
aclList.push(acl);
|
|
167
|
-
_doList(list.slice(1));
|
|
168
|
-
});
|
|
169
|
-
} else {
|
|
170
|
-
// all gone
|
|
171
|
-
callbackFunction(true, ACLunion(aclList));
|
|
172
|
-
}
|
|
173
|
-
};
|
|
174
|
-
_doList(subjectList);
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
/**
|
|
178
|
-
* Represents these as an RDF graph by combination of modes
|
|
179
|
-
*
|
|
180
|
-
* Each agent can only be in one place in this model, one combination of modes.
|
|
181
|
-
* Combos are like full control, read append, read only etc.
|
|
182
|
-
*/
|
|
183
|
-
function ACLbyCombination(ac) {
|
|
184
|
-
var byCombo = {};
|
|
185
|
-
['agent', 'agentClass', 'agentGroup', 'origin', 'originClass'].forEach(function (pred) {
|
|
186
|
-
for (var agent in ac[pred]) {
|
|
187
|
-
var combo = [];
|
|
188
|
-
for (var mode in ac[pred][agent]) {
|
|
189
|
-
combo.push(mode);
|
|
190
|
-
}
|
|
191
|
-
combo.sort();
|
|
192
|
-
var combo2 = combo.join('\n');
|
|
193
|
-
if (!byCombo[combo2]) byCombo[combo2] = [];
|
|
194
|
-
byCombo[combo2].push([pred, agent]);
|
|
195
|
-
}
|
|
196
|
-
});
|
|
197
|
-
return byCombo;
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
/**
|
|
201
|
-
* Write ACL graph to store from AC
|
|
202
|
-
*/
|
|
203
|
-
function makeACLGraph(kb, x, ac, aclDoc) {
|
|
204
|
-
var byCombo = ACLbyCombination(ac);
|
|
205
|
-
return makeACLGraphbyCombo(kb, x, byCombo, aclDoc);
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
/**
|
|
209
|
-
* Write ACL graph to store from combo
|
|
210
|
-
*/
|
|
211
|
-
function makeACLGraphbyCombo(kb, x, byCombo, aclDoc, main, defa) {
|
|
212
|
-
var ACL = ns.acl;
|
|
213
|
-
for (var combo in byCombo) {
|
|
214
|
-
var pairs = byCombo[combo];
|
|
215
|
-
if (!pairs.length) continue; // do not add to store when no agent
|
|
216
|
-
var modeURIs = combo.split('\n');
|
|
217
|
-
var _short = modeURIs.map(function (u) {
|
|
218
|
-
return u.split('#')[1];
|
|
219
|
-
}).join('');
|
|
220
|
-
if (defa && !main) _short += 'Default'; // don't muddle authorizations
|
|
221
|
-
var a = kb.sym(aclDoc.uri + '#' + _short);
|
|
222
|
-
kb.add(a, ns.rdf('type'), ACL('Authorization'), aclDoc);
|
|
223
|
-
if (main) {
|
|
224
|
-
kb.add(a, ACL('accessTo'), x, aclDoc);
|
|
225
|
-
}
|
|
226
|
-
if (defa) {
|
|
227
|
-
kb.add(a, ACL('default'), x, aclDoc);
|
|
228
|
-
}
|
|
229
|
-
for (var i = 0; i < modeURIs.length; i++) {
|
|
230
|
-
kb.add(a, ACL('mode'), kb.sym(modeURIs[i]), aclDoc);
|
|
231
|
-
}
|
|
232
|
-
for (var _i = 0; _i < pairs.length; _i++) {
|
|
233
|
-
var pred = pairs[_i][0];
|
|
234
|
-
var ag = pairs[_i][1];
|
|
235
|
-
kb.add(a, ACL(pred), kb.sym(ag), aclDoc);
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
/**
|
|
241
|
-
* Debugging short strings for dumping ACL
|
|
242
|
-
* and possibly in the UI
|
|
243
|
-
*/
|
|
244
|
-
function ACLToString(ac) {
|
|
245
|
-
return comboToString(ACLbyCombination(ac));
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
/**
|
|
249
|
-
* Convert a [[ComboList]] to a string
|
|
250
|
-
*/
|
|
251
|
-
function comboToString(byCombo) {
|
|
252
|
-
var str = '';
|
|
253
|
-
for (var combo in byCombo) {
|
|
254
|
-
var modeURIs = combo.split('\n');
|
|
255
|
-
var initials = modeURIs.map(function (u) {
|
|
256
|
-
return u.split('#')[1][0];
|
|
257
|
-
}).join('');
|
|
258
|
-
str += initials + ':';
|
|
259
|
-
var pairs = byCombo[combo];
|
|
260
|
-
for (var i = 0; i < pairs.length; i++) {
|
|
261
|
-
var pred = pairs[i][0];
|
|
262
|
-
var ag = (0, _rdflib.sym)(pairs[i][1]);
|
|
263
|
-
str += pred === 'agent' ? '@' : '';
|
|
264
|
-
str += ag.sameTerm(ns.foaf('Agent')) ? '*' : utils.label(ag);
|
|
265
|
-
if (i < pairs.length - 1) str += ',';
|
|
266
|
-
}
|
|
267
|
-
str += ';';
|
|
268
|
-
}
|
|
269
|
-
return '{' + str.slice(0, -1) + '}'; // drop extra semicolon
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
/**
|
|
273
|
-
* Write ACL graph as Turtle
|
|
274
|
-
*/
|
|
275
|
-
function makeACLString(x, ac, aclDoc) {
|
|
276
|
-
var kb2 = (0, _rdflib.graph)();
|
|
277
|
-
makeACLGraph(kb2, x, ac, aclDoc);
|
|
278
|
-
return (0, _rdflib.serialize)(aclDoc, kb2, aclDoc.uri, 'text/turtle') || '';
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
/**
|
|
282
|
-
* Write ACL graph to web
|
|
283
|
-
*/
|
|
284
|
-
function putACLObject(kb, x, ac, aclDoc, callbackFunction) {
|
|
285
|
-
var byCombo = ACLbyCombination(ac);
|
|
286
|
-
return putACLbyCombo(kb, x, byCombo, aclDoc, callbackFunction);
|
|
287
|
-
}
|
|
288
|
-
|
|
289
|
-
/**
|
|
290
|
-
* Write ACL graph to web from a [[ComboList]]
|
|
291
|
-
*/
|
|
292
|
-
function putACLbyCombo(kb, x, byCombo, aclDoc, callbackFunction) {
|
|
293
|
-
var _kb$updater;
|
|
294
|
-
var kb2 = (0, _rdflib.graph)();
|
|
295
|
-
makeACLGraphbyCombo(kb2, x, byCombo, aclDoc, true);
|
|
296
|
-
|
|
297
|
-
// const str = makeACLString = function(x, ac, aclDoc)
|
|
298
|
-
(_kb$updater = kb.updater) === null || _kb$updater === void 0 || _kb$updater.put(aclDoc, kb2.statementsMatching(undefined, undefined, undefined, aclDoc), 'text/turtle', function (uri, ok, message) {
|
|
299
|
-
if (!ok) {
|
|
300
|
-
callbackFunction(ok, message);
|
|
301
|
-
} else {
|
|
302
|
-
var _kb$fetcher;
|
|
303
|
-
(_kb$fetcher = kb.fetcher) === null || _kb$fetcher === void 0 || _kb$fetcher.unload(aclDoc);
|
|
304
|
-
makeACLGraphbyCombo(kb, x, byCombo, aclDoc, true);
|
|
305
|
-
kb.fetcher.requested[aclDoc.uri] = 'done'; // missing: save headers
|
|
306
|
-
callbackFunction(ok);
|
|
307
|
-
}
|
|
308
|
-
});
|
|
309
|
-
}
|
|
310
|
-
/**
|
|
311
|
-
* Fix the ACl for an individual card as a function of the groups it is in
|
|
312
|
-
*
|
|
313
|
-
* All group files must be loaded first
|
|
314
|
-
*/
|
|
315
|
-
function fixIndividualCardACL(person, log, callbackFunction) {
|
|
316
|
-
var groups = kb.each(undefined, ns.vcard('hasMember'), person);
|
|
317
|
-
// const doc = person.doc()
|
|
318
|
-
if (groups) {
|
|
319
|
-
fixIndividualACL(person, groups, log, callbackFunction);
|
|
320
|
-
} else {
|
|
321
|
-
log('This card is in no groups');
|
|
322
|
-
callbackFunction(true); // fine, no requirements to access. default should be ok
|
|
323
|
-
}
|
|
324
|
-
// @@ if no groups, then use default for People container or the book top container.?
|
|
325
|
-
}
|
|
326
|
-
|
|
327
|
-
/**
|
|
328
|
-
* This function is used by [[fixIndividualCardACL]]
|
|
329
|
-
*/
|
|
330
|
-
function fixIndividualACL(item, subjects, log, callbackFunction) {
|
|
331
|
-
log = log || debug.log;
|
|
332
|
-
var doc = item.doc();
|
|
333
|
-
getACLorDefault(doc, function (ok, exists, targetDoc, targetACLDoc, defaultHolder, defaultACLDoc) {
|
|
334
|
-
if (!ok || !defaultHolder || !defaultACLDoc) return callbackFunction(false, targetACLDoc); // ie message
|
|
335
|
-
var ac = exists ? readACL(targetDoc, targetACLDoc) : readACL(defaultHolder, defaultACLDoc);
|
|
336
|
-
loadUnionACL(subjects, function (ok, union) {
|
|
337
|
-
if (!ok) return callbackFunction(false, union);
|
|
338
|
-
if (sameACL(union, ac)) {
|
|
339
|
-
log('Nice - same ACL. no change ' + utils.label(item) + ' ' + doc);
|
|
340
|
-
} else {
|
|
341
|
-
log('Group ACLs differ for ' + utils.label(item) + ' ' + doc);
|
|
342
|
-
|
|
343
|
-
// log("Group ACLs: " + makeACLString(targetDoc, union, targetACLDoc))
|
|
344
|
-
// log((exists ? "Previous set" : "Default") + " ACLs: " +
|
|
345
|
-
// makeACLString(targetDoc, ac, targetACLDoc))
|
|
346
|
-
|
|
347
|
-
putACLObject(kb, targetDoc, union, targetACLDoc, callbackFunction);
|
|
348
|
-
}
|
|
349
|
-
});
|
|
350
|
-
});
|
|
351
|
-
}
|
|
352
|
-
|
|
353
|
-
/**
|
|
354
|
-
* Set an ACL
|
|
355
|
-
*/
|
|
356
|
-
function setACL(docURI, aclText, callbackFunction) {
|
|
357
|
-
var aclDoc = kb.any(docURI, _solidLogic.ACL_LINK); // @@ check that this get set by web.js
|
|
358
|
-
if (!kb.fetcher) {
|
|
359
|
-
throw new Error('Store has no fetcher');
|
|
360
|
-
}
|
|
361
|
-
if (aclDoc) {
|
|
362
|
-
// Great we already know where it is
|
|
363
|
-
kb.fetcher.webOperation('PUT', aclDoc.value, {
|
|
364
|
-
data: aclText,
|
|
365
|
-
contentType: 'text/turtle'
|
|
366
|
-
}).then(function (res) {
|
|
367
|
-
callbackFunction(res.ok, res.error || '');
|
|
368
|
-
}); // @@@ check params
|
|
369
|
-
} else {
|
|
370
|
-
kb.fetcher.nowOrWhenFetched(docURI, undefined, function (ok, body) {
|
|
371
|
-
if (!ok) return callbackFunction(ok, 'Gettting headers for ACL: ' + body);
|
|
372
|
-
var aclDoc = kb.any(docURI, _solidLogic.ACL_LINK); // @@ check that this get set by web.js
|
|
373
|
-
if (!aclDoc) {
|
|
374
|
-
// complainIfBad(false, "No Link rel=ACL header for " + docURI)
|
|
375
|
-
callbackFunction(false, 'No Link rel=ACL header for ' + docURI);
|
|
376
|
-
} else {
|
|
377
|
-
if (!kb.fetcher) {
|
|
378
|
-
throw new Error('Store has no fetcher');
|
|
379
|
-
}
|
|
380
|
-
kb.fetcher.webOperation('PUT', aclDoc.value, {
|
|
381
|
-
data: aclText,
|
|
382
|
-
contentType: 'text/turtle'
|
|
383
|
-
}).then(function (res) {
|
|
384
|
-
callbackFunction(res.ok, res.error || '');
|
|
385
|
-
});
|
|
386
|
-
}
|
|
387
|
-
});
|
|
388
|
-
}
|
|
389
|
-
}
|
|
390
|
-
|
|
391
|
-
/**
|
|
392
|
-
* Get ACL file or default if necessary
|
|
393
|
-
*
|
|
394
|
-
* @param callbackFunction Will be called in the following ways, in the following cases:
|
|
395
|
-
* * `callbackFunction(true, true, doc, aclDoc)` if the ACL did exist
|
|
396
|
-
* * `callbackFunction(true, false, doc, aclDoc, defaultHolder, defaultACLDoc)` if the ACL file did not exist but a default did
|
|
397
|
-
* * `callbackFunction(false, false, status, message)` when there was an error getting the original
|
|
398
|
-
* * `callbackFunction(false, true, status, message)` when there was an error getting the default
|
|
399
|
-
*/
|
|
400
|
-
function getACLorDefault(doc, callbackFunction) {
|
|
401
|
-
getACL(doc, function (ok, status, aclDoc, message) {
|
|
402
|
-
var ACL = ns.acl;
|
|
403
|
-
if (!ok) return callbackFunction(false, false, status, message);
|
|
404
|
-
|
|
405
|
-
// Recursively search for the ACL file which gives default access
|
|
406
|
-
var _tryParent = function tryParent(uri) {
|
|
407
|
-
if (uri.slice(-1) === '/') {
|
|
408
|
-
uri = uri.slice(0, -1);
|
|
409
|
-
}
|
|
410
|
-
var right = uri.lastIndexOf('/');
|
|
411
|
-
var left = uri.indexOf('/', uri.indexOf('//') + 2);
|
|
412
|
-
if (left > right) {
|
|
413
|
-
return callbackFunction(false, true, 404, 'Found no ACL resource');
|
|
414
|
-
}
|
|
415
|
-
uri = uri.slice(0, right + 1);
|
|
416
|
-
var doc2 = (0, _rdflib.sym)(uri);
|
|
417
|
-
getACL(doc2, function (ok, status, defaultACLDoc) {
|
|
418
|
-
if (!ok) {
|
|
419
|
-
return callbackFunction(false, true, status, "( No ACL pointer ".concat(uri, " ").concat(status, ")").concat(defaultACLDoc));
|
|
420
|
-
} else if (status === 403) {
|
|
421
|
-
return callbackFunction(false, true, status, "( default ACL file FORBIDDEN. Stop.".concat(uri, ")"));
|
|
422
|
-
} else if (status === 404) {
|
|
423
|
-
return _tryParent(uri);
|
|
424
|
-
} else if (status !== 200) {
|
|
425
|
-
return callbackFunction(false, true, status, "Error status '".concat(status, "' searching for default for ").concat(doc2));
|
|
426
|
-
}
|
|
427
|
-
// 200
|
|
428
|
-
// statusBlock.textContent += (" ACCESS set at " + uri + ". End search.")
|
|
429
|
-
var defaults = kb.each(undefined, ACL('default'), kb.sym(uri), defaultACLDoc).concat(kb.each(undefined, ACL('defaultForNew'), kb.sym(uri), defaultACLDoc));
|
|
430
|
-
if (!defaults.length) {
|
|
431
|
-
return _tryParent(uri); // Keep searching
|
|
432
|
-
}
|
|
433
|
-
var defaultHolder = kb.sym(uri);
|
|
434
|
-
return callbackFunction(true, false, doc, aclDoc, defaultHolder, defaultACLDoc);
|
|
435
|
-
});
|
|
436
|
-
}; // tryParent
|
|
437
|
-
|
|
438
|
-
if (!ok) {
|
|
439
|
-
return callbackFunction(false, false, status, "Error accessing Access Control information for ".concat(doc, ") ").concat(message));
|
|
440
|
-
} else if (status === 404) {
|
|
441
|
-
_tryParent(doc.uri); // @@ construct default one - the server should do that
|
|
442
|
-
} else if (status === 403) {
|
|
443
|
-
return callbackFunction(false, false, status, "(Sharing not available to you)".concat(message));
|
|
444
|
-
} else if (status !== 200) {
|
|
445
|
-
return callbackFunction(false, false, status, "Error ".concat(status, " accessing Access Control information for ").concat(doc, ": ").concat(message));
|
|
446
|
-
} else {
|
|
447
|
-
// 200
|
|
448
|
-
return callbackFunction(true, true, doc, aclDoc);
|
|
449
|
-
}
|
|
450
|
-
}); // Call to getACL
|
|
451
|
-
}
|
|
452
|
-
|
|
453
|
-
/**
|
|
454
|
-
* Calls back `(ok, status, acldoc, message)` as follows
|
|
455
|
-
*
|
|
456
|
-
* * `(false, 900, errormessage)` if no link header
|
|
457
|
-
* * `(true, 403, documentSymbol, fileaccesserror)` if not authorized
|
|
458
|
-
* * `(true, 404, documentSymbol, fileaccesserror)` if does not exist
|
|
459
|
-
* * `(true, 200, documentSymbol)` if file exists and read OK
|
|
460
|
-
*/
|
|
461
|
-
function getACL(doc, callbackFunction) {
|
|
462
|
-
if (!kb.fetcher) {
|
|
463
|
-
throw new Error('kb has no fetcher');
|
|
464
|
-
}
|
|
465
|
-
kb.fetcher.nowOrWhenFetched(doc, undefined, function (ok, body) {
|
|
466
|
-
if (!ok) {
|
|
467
|
-
return callbackFunction(ok, "Can't get headers to find ACL for ".concat(doc, ": ").concat(body));
|
|
468
|
-
}
|
|
469
|
-
var aclDoc = kb.any(doc, _solidLogic.ACL_LINK); // @@ check that this get set by web.js
|
|
470
|
-
if (!aclDoc) {
|
|
471
|
-
callbackFunction(false, 900, "No Link rel=ACL header for ".concat(doc));
|
|
472
|
-
} else {
|
|
473
|
-
if (!kb.fetcher) {
|
|
474
|
-
throw new Error('kb has no fetcher');
|
|
475
|
-
}
|
|
476
|
-
if (kb.fetcher.nonexistent[aclDoc.value]) {
|
|
477
|
-
return callbackFunction(true, 404, aclDoc, "ACL file ".concat(aclDoc, " does not exist."));
|
|
478
|
-
}
|
|
479
|
-
kb.fetcher.nowOrWhenFetched(aclDoc, undefined, function (ok, message, response) {
|
|
480
|
-
if (!ok) {
|
|
481
|
-
callbackFunction(true, response.status, aclDoc, "Can't read Access Control File ".concat(aclDoc, ": ").concat(message));
|
|
482
|
-
} else {
|
|
483
|
-
callbackFunction(true, 200, aclDoc);
|
|
484
|
-
}
|
|
485
|
-
});
|
|
486
|
-
}
|
|
487
|
-
});
|
|
488
|
-
}
|
|
489
|
-
|
|
490
|
-
/**
|
|
491
|
-
* Calls [[getACLorDefault]] and then (?)
|
|
492
|
-
*/
|
|
493
|
-
function getProspectiveHolder(_x) {
|
|
494
|
-
return _getProspectiveHolder.apply(this, arguments);
|
|
495
|
-
}
|
|
496
|
-
function _getProspectiveHolder() {
|
|
497
|
-
_getProspectiveHolder = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee(targetDirectory) {
|
|
498
|
-
return _regenerator["default"].wrap(function (_context) {
|
|
499
|
-
while (1) switch (_context.prev = _context.next) {
|
|
500
|
-
case 0:
|
|
501
|
-
return _context.abrupt("return", new Promise(function (resolve, reject) {
|
|
502
|
-
return getACLorDefault((0, _rdflib.sym)(targetDirectory), function (ok, isDirectACL, targetDoc, targetACLDoc, defaultHolder) {
|
|
503
|
-
if (ok) {
|
|
504
|
-
return resolve(isDirectACL ? targetDoc : defaultHolder);
|
|
505
|
-
}
|
|
506
|
-
return reject(new Error("Error loading ".concat(targetDirectory)));
|
|
507
|
-
});
|
|
508
|
-
}));
|
|
509
|
-
case 1:
|
|
510
|
-
case "end":
|
|
511
|
-
return _context.stop();
|
|
512
|
-
}
|
|
513
|
-
}, _callee);
|
|
514
|
-
}));
|
|
515
|
-
return _getProspectiveHolder.apply(this, arguments);
|
|
516
|
-
}
|
|
517
|
-
//# sourceMappingURL=acl.js.map
|
package/lib/acl/acl.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"acl.js","names":["ns","_interopRequireWildcard","require","_solidLogic","utils","debug","_rdflib","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","_typeof","has","get","set","_t","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","kb","solidLogicSingleton","store","adoptACLDefault","doc","aclDoc","defaultResource","defaultACLDoc","ACL","acl","isContainer","uri","slice","defaults","each","undefined","concat","proposed","reduce","accumulatedStatements","da","statementsMatching","rdf","st","kb2","graph","forEach","add","move","subject","predicate","object","sym","symbol","y","length","readACL","arguments","getDefaults","auths","getDefaultsFallback","ac","agent","agentClass","agentGroup","origin","originClass","keys","pred","a","mode","sameACL","b","contains","ACLunion","list","ag","_loop","k","loadUnionACL","subjectList","callbackFunction","aclList","doList","shift","getACLorDefault","ok","p2","targetDoc","targetACLDoc","defaultHolder","defa","push","ACLbyCombination","byCombo","combo","sort","combo2","join","makeACLGraph","x","makeACLGraphbyCombo","main","pairs","modeURIs","split","short","map","u","ACLToString","comboToString","str","initials","sameTerm","foaf","label","makeACLString","serialize","putACLObject","putACLbyCombo","_kb$updater","updater","put","message","_kb$fetcher","fetcher","unload","requested","fixIndividualCardACL","person","log","groups","vcard","fixIndividualACL","item","subjects","exists","union","setACL","docURI","aclText","any","ACL_LINK","Error","webOperation","value","data","contentType","then","res","error","nowOrWhenFetched","body","getACL","status","tryParent","right","lastIndexOf","left","indexOf","doc2","nonexistent","response","getProspectiveHolder","_x","_getProspectiveHolder","apply","_asyncToGenerator2","_regenerator","mark","_callee","targetDirectory","wrap","_context","prev","next","abrupt","Promise","resolve","reject","isDirectACL","stop"],"sources":["../../src/acl/acl.ts"],"sourcesContent":["/**\n * Non-UI functions for access control.\n * See https://github.com/solidos/web-access-control-spec\n * for the spec that defines how ACL documents work.\n * @packageDocumentation\n */\n\nimport * as ns from '../ns'\nimport { solidLogicSingleton, ACL_LINK } from 'solid-logic'\nimport * as utils from '../utils'\nimport { AgentMapMap, AgentMapUnion, ComboList } from './types'\nimport * as debug from '../debug'\nimport { graph, Store, NamedNode, serialize, st, Statement, sym, LiveStore } from 'rdflib'\n\nconst kb = solidLogicSingleton.store\n\n/**\n * Take the \"default\" ACL and convert it into the equivalent ACL\n * which the resource would have had. Return it as a new separate store.\n * The \"defaultForNew\" predicate is also accepted, as a deprecated\n * synonym for \"default\".\n */\nexport function adoptACLDefault (\n doc: NamedNode,\n aclDoc: NamedNode,\n defaultResource: NamedNode,\n defaultACLDoc: NamedNode\n): Store {\n const ACL = ns.acl\n const isContainer = doc.uri.slice(-1) === '/' // Give default for all directories\n\n const defaults = kb\n .each(undefined, ACL('default'), defaultResource, defaultACLDoc)\n .concat(kb.each(undefined, ACL('defaultForNew'), defaultResource, defaultACLDoc))\n\n const proposed = defaults.reduce((accumulatedStatements, da) => accumulatedStatements\n .concat(kb.statementsMatching(da as NamedNode, ns.rdf('type'), ACL('Authorization'), defaultACLDoc))\n .concat(kb.statementsMatching(da as NamedNode, ACL('agent'), undefined, defaultACLDoc))\n .concat(kb.statementsMatching(da as NamedNode, ACL('agentClass'), undefined, defaultACLDoc))\n .concat(kb.statementsMatching(da as NamedNode, ACL('agentGroup'), undefined, defaultACLDoc))\n .concat(kb.statementsMatching(da as NamedNode, ACL('origin'), undefined, defaultACLDoc))\n .concat(kb.statementsMatching(da as NamedNode, ACL('originClass'), undefined, defaultACLDoc))\n .concat(kb.statementsMatching(da as NamedNode, ACL('mode'), undefined, defaultACLDoc))\n .concat(st(da as NamedNode, ACL('accessTo'), doc, defaultACLDoc))\n .concat(isContainer ? st(da as NamedNode, ACL('default'), doc, defaultACLDoc) : []), [] as Statement[])\n\n const kb2 = graph() // Potential - derived is kept apart\n proposed.forEach(st => kb2.add(move(st.subject), move(st.predicate), move(st.object), sym(aclDoc.uri)))\n return kb2 as LiveStore\n\n function move (symbol) {\n const y = defaultACLDoc.uri.length // The default ACL file\n return sym(\n symbol.uri.slice(0, y) === defaultACLDoc.uri\n ? aclDoc.uri + symbol.uri.slice(y)\n : symbol.uri\n )\n }\n}\n\n/**\n * Read and canonicalize the ACL for x in aclDoc\n *\n * Accumulate the access rights which each agent or class has\n */\nexport function readACL (\n doc: NamedNode,\n aclDoc: NamedNode,\n kb2: Store = kb,\n getDefaults: boolean = false\n): AgentMapMap {\n const auths: Array<NamedNode> = getDefaults\n ? getDefaultsFallback(kb2, ns)\n : kb2.each(undefined, ns.acl('accessTo'), doc)\n\n const ACL = ns.acl\n const ac = {\n agent: {},\n agentClass: {},\n agentGroup: {},\n origin: {},\n originClass: {}\n }\n Object.keys(ac).forEach(pred => {\n auths.forEach(function (a) {\n (kb2.each(a, ACL('mode')) as Array<NamedNode>).forEach(function (mode) {\n (kb2.each(a, ACL(pred)) as Array<NamedNode>).forEach(function (agent) {\n ac[pred][agent.uri] = ac[pred][agent.uri] || {}\n ac[pred][agent.uri][mode.uri] = a // could be \"true\" but leave pointer just in case\n })\n })\n })\n })\n return ac\n\n function getDefaultsFallback (kb, ns) {\n return kb\n .each(undefined, ns.acl('default'), doc)\n .concat(kb.each(undefined, ns.acl('defaultForNew'), doc))\n }\n}\n\n/**\n * Compare two ACLs\n */\nexport function sameACL (a: AgentMapMap | AgentMapUnion, b: AgentMapMap | AgentMapUnion): boolean {\n const contains = function (a, b) {\n for (const pred in {\n agent: true,\n agentClass: true,\n agentGroup: true,\n origin: true,\n originClass: true\n }) {\n if (a[pred]) {\n for (const agent in a[pred]) {\n for (const mode in a[pred][agent]) {\n if (!b[pred][agent] || !b[pred][agent][mode]) {\n return false\n }\n }\n }\n }\n }\n return true\n }\n return contains(a, b) && contains(b, a)\n}\n\n/**\n * Union N ACLs\n */\nexport function ACLunion (list: Array<AgentMapMap | AgentMapUnion>): AgentMapUnion {\n const b = list[0]\n let a, ag\n for (let k = 1; k < list.length; k++) {\n ;['agent', 'agentClass', 'agentGroup', 'origin', 'originClass'].forEach(\n function (pred) {\n a = list[k]\n if (a[pred]) {\n for (ag in a[pred]) {\n for (const mode in a[pred][ag]) {\n if (!b[pred][ag]) b[pred][ag] = []\n b[pred][ag][mode] = true\n }\n }\n }\n }\n )\n }\n return b as AgentMapUnion\n}\n\ntype loadUnionACLCallback = (ok: boolean, message?: string | NamedNode | AgentMapUnion | AgentMapMap) => void\n\n/**\n * Merge ACLs lists from things to form union\n */\nexport function loadUnionACL (subjectList: Array<NamedNode>, callbackFunction: loadUnionACLCallback): void {\n const aclList: Array<AgentMapMap> = []\n const doList = function (list) {\n if (list.length) {\n const doc = list.shift().doc()\n getACLorDefault(doc, function (\n ok,\n p2,\n targetDoc,\n targetACLDoc,\n defaultHolder,\n defaultACLDoc\n ) {\n const defa = !p2\n if (!ok || !defaultHolder || !defaultACLDoc) return callbackFunction(ok, targetACLDoc)\n const acl = defa\n ? readACL(defaultHolder, defaultACLDoc)\n : readACL(targetDoc as NamedNode, targetACLDoc as NamedNode)\n aclList.push(acl)\n doList(list.slice(1))\n })\n } else {\n // all gone\n callbackFunction(true, ACLunion(aclList))\n }\n }\n doList(subjectList)\n}\n\n/**\n * Represents these as an RDF graph by combination of modes\n *\n * Each agent can only be in one place in this model, one combination of modes.\n * Combos are like full control, read append, read only etc.\n */\nexport function ACLbyCombination (ac: AgentMapMap | AgentMapUnion): ComboList {\n const byCombo = {}\n ;['agent', 'agentClass', 'agentGroup', 'origin', 'originClass'].forEach(function (pred) {\n for (const agent in ac[pred]) {\n const combo: string[] = []\n for (const mode in ac[pred][agent]) {\n combo.push(mode)\n }\n combo.sort()\n const combo2 = combo.join('\\n')\n if (!byCombo[combo2]) byCombo[combo2] = []\n byCombo[combo2].push([pred, agent])\n }\n })\n return byCombo\n}\n\n/**\n * Write ACL graph to store from AC\n */\nexport function makeACLGraph (kb: Store, x: NamedNode, ac: AgentMapMap, aclDoc: NamedNode): void {\n const byCombo = ACLbyCombination(ac)\n return makeACLGraphbyCombo(kb, x, byCombo, aclDoc)\n}\n\n/**\n * Write ACL graph to store from combo\n */\nexport function makeACLGraphbyCombo (\n kb: Store,\n x: NamedNode,\n byCombo: ComboList,\n aclDoc: NamedNode,\n main?: boolean,\n defa?: boolean\n): void {\n const ACL = ns.acl\n for (const combo in byCombo) {\n const pairs = byCombo[combo]\n if (!pairs.length) continue // do not add to store when no agent\n const modeURIs = combo.split('\\n')\n let short = modeURIs\n .map(function (u) {\n return u.split('#')[1]\n })\n .join('')\n if (defa && !main) short += 'Default' // don't muddle authorizations\n const a = kb.sym(aclDoc.uri + '#' + short)\n kb.add(a, ns.rdf('type'), ACL('Authorization'), aclDoc)\n if (main) {\n kb.add(a, ACL('accessTo'), x, aclDoc)\n }\n if (defa) {\n kb.add(a, ACL('default'), x, aclDoc)\n }\n for (let i = 0; i < modeURIs.length; i++) {\n kb.add(a, ACL('mode'), kb.sym(modeURIs[i]), aclDoc)\n }\n for (let i = 0; i < pairs.length; i++) {\n const pred = pairs[i][0]\n const ag = pairs[i][1]\n kb.add(a, ACL(pred), kb.sym(ag), aclDoc)\n }\n }\n}\n\n/**\n * Debugging short strings for dumping ACL\n * and possibly in the UI\n */\nexport function ACLToString (ac: AgentMapMap): string {\n return comboToString(ACLbyCombination(ac))\n}\n\n/**\n * Convert a [[ComboList]] to a string\n */\nexport function comboToString (byCombo: ComboList): string {\n let str = ''\n for (const combo in byCombo) {\n const modeURIs = combo.split('\\n')\n const initials = modeURIs\n .map(function (u) {\n return u.split('#')[1][0]\n })\n .join('')\n str += initials + ':'\n const pairs = byCombo[combo]\n for (let i = 0; i < pairs.length; i++) {\n const pred = pairs[i][0]\n const ag = sym(pairs[i][1])\n str += pred === 'agent' ? '@' : ''\n str += ag.sameTerm(ns.foaf('Agent')) ? '*' : utils.label(ag)\n if (i < pairs.length - 1) str += ','\n }\n str += ';'\n }\n return '{' + str.slice(0, -1) + '}' // drop extra semicolon\n}\n\n/**\n * Write ACL graph as Turtle\n */\nexport function makeACLString (x: NamedNode, ac: AgentMapMap, aclDoc: NamedNode): string {\n const kb2 = graph()\n makeACLGraph(kb2, x, ac, aclDoc)\n return serialize(aclDoc, kb2, aclDoc.uri, 'text/turtle') || ''\n}\n\n/**\n * Write ACL graph to web\n */\nexport function putACLObject (\n kb: LiveStore,\n x: NamedNode,\n ac: AgentMapMap | AgentMapUnion,\n aclDoc: NamedNode,\n callbackFunction: (ok: boolean, message?: string) => void\n): void {\n const byCombo = ACLbyCombination(ac)\n return putACLbyCombo(kb, x, byCombo, aclDoc, callbackFunction)\n}\n\n/**\n * Write ACL graph to web from a [[ComboList]]\n */\nexport function putACLbyCombo (\n kb: LiveStore,\n x: NamedNode,\n byCombo: ComboList,\n aclDoc: NamedNode,\n callbackFunction: (ok: boolean, message?: string) => void\n): void {\n const kb2 = graph()\n makeACLGraphbyCombo(kb2, x, byCombo, aclDoc, true)\n\n // const str = makeACLString = function(x, ac, aclDoc)\n kb.updater?.put(\n aclDoc,\n kb2.statementsMatching(undefined, undefined, undefined, aclDoc),\n 'text/turtle',\n function (uri, ok, message) {\n if (!ok) {\n callbackFunction(ok, message)\n } else {\n kb.fetcher?.unload(aclDoc)\n makeACLGraphbyCombo(kb, x, byCombo, aclDoc, true)\n kb.fetcher!.requested[aclDoc.uri] = 'done' // missing: save headers\n callbackFunction(ok)\n }\n }\n )\n}\n\ntype fixIndividualCardACLCallback = (ok: boolean, message?: string | NamedNode | AgentMapUnion | AgentMapMap) => void\ntype fixIndividualACLCallback = (ok: boolean, message?: string | NamedNode | AgentMapUnion | AgentMapMap) => void\n\n/**\n * Fix the ACl for an individual card as a function of the groups it is in\n *\n * All group files must be loaded first\n */\nexport function fixIndividualCardACL (person: NamedNode, log: Function, callbackFunction: fixIndividualCardACLCallback): void {\n const groups = kb.each(undefined, ns.vcard('hasMember'), person) as NamedNode[]\n // const doc = person.doc()\n if (groups) {\n fixIndividualACL(person, groups, log, callbackFunction)\n } else {\n log('This card is in no groups')\n callbackFunction(true) // fine, no requirements to access. default should be ok\n }\n // @@ if no groups, then use default for People container or the book top container.?\n}\n\n/**\n * This function is used by [[fixIndividualCardACL]]\n */\nexport function fixIndividualACL (item: NamedNode, subjects: Array<NamedNode>, log: Function, callbackFunction: fixIndividualACLCallback): void {\n log = log || debug.log\n const doc = item.doc()\n getACLorDefault(doc, function (\n ok,\n exists,\n targetDoc,\n targetACLDoc,\n defaultHolder,\n defaultACLDoc\n ) {\n if (!ok || !defaultHolder || !defaultACLDoc) return callbackFunction(false, targetACLDoc) // ie message\n const ac = exists\n ? readACL(targetDoc as NamedNode, targetACLDoc as NamedNode)\n : readACL(defaultHolder, defaultACLDoc)\n loadUnionACL(subjects, function (ok, union) {\n if (!ok) return callbackFunction(false, union)\n if (sameACL(union as AgentMapMap | AgentMapUnion, ac)) {\n log('Nice - same ACL. no change ' + utils.label(item) + ' ' + doc)\n } else {\n log('Group ACLs differ for ' + utils.label(item) + ' ' + doc)\n\n // log(\"Group ACLs: \" + makeACLString(targetDoc, union, targetACLDoc))\n // log((exists ? \"Previous set\" : \"Default\") + \" ACLs: \" +\n // makeACLString(targetDoc, ac, targetACLDoc))\n\n putACLObject(\n kb as unknown as LiveStore,\n targetDoc as NamedNode,\n union as AgentMapMap | AgentMapUnion,\n targetACLDoc as NamedNode,\n callbackFunction\n )\n }\n })\n })\n}\n\n/**\n * Set an ACL\n */\nexport function setACL (\n docURI: NamedNode,\n aclText: string,\n callbackFunction: (ok: boolean, message: string) => void\n): void {\n const aclDoc = kb.any(\n docURI,\n ACL_LINK\n ) // @@ check that this get set by web.js\n if (!kb.fetcher) {\n throw new Error('Store has no fetcher')\n }\n if (aclDoc) {\n // Great we already know where it is\n kb.fetcher\n .webOperation('PUT', aclDoc.value, {\n data: aclText,\n contentType: 'text/turtle'\n })\n .then((res) => {\n callbackFunction(res.ok, res.error || '')\n }) // @@@ check params\n } else {\n kb.fetcher.nowOrWhenFetched(docURI, undefined, function (ok, body) {\n if (!ok) return callbackFunction(ok, 'Gettting headers for ACL: ' + body)\n const aclDoc = kb.any(\n docURI,\n ACL_LINK\n ) // @@ check that this get set by web.js\n if (!aclDoc) {\n // complainIfBad(false, \"No Link rel=ACL header for \" + docURI)\n callbackFunction(false, 'No Link rel=ACL header for ' + docURI)\n } else {\n if (!kb.fetcher) {\n throw new Error('Store has no fetcher')\n }\n kb.fetcher\n .webOperation('PUT', aclDoc.value, {\n data: aclText,\n contentType: 'text/turtle'\n })\n .then((res) => {\n callbackFunction(res.ok, res.error || '')\n })\n }\n })\n }\n}\n\n/**\n * Get ACL file or default if necessary\n *\n * @param callbackFunction Will be called in the following ways, in the following cases:\n * * `callbackFunction(true, true, doc, aclDoc)` if the ACL did exist\n * * `callbackFunction(true, false, doc, aclDoc, defaultHolder, defaultACLDoc)` if the ACL file did not exist but a default did\n * * `callbackFunction(false, false, status, message)` when there was an error getting the original\n * * `callbackFunction(false, true, status, message)` when there was an error getting the default\n */\nexport function getACLorDefault (\n doc: NamedNode,\n callbackFunction: (\n a: boolean,\n b: boolean,\n statusOrMessage: number | NamedNode,\n message: string | NamedNode,\n c?: NamedNode,\n d?: NamedNode\n ) => void\n): void {\n getACL(doc, function (ok, status, aclDoc, message): string | void {\n const ACL = ns.acl\n if (!ok) return callbackFunction(false, false, status as number, message as string)\n\n // Recursively search for the ACL file which gives default access\n const tryParent = function (uri) {\n if (uri.slice(-1) === '/') {\n uri = uri.slice(0, -1)\n }\n const right = uri.lastIndexOf('/')\n const left = uri.indexOf('/', uri.indexOf('//') + 2)\n if (left > right) {\n return callbackFunction(false, true, 404, 'Found no ACL resource')\n }\n uri = uri.slice(0, right + 1)\n const doc2 = sym(uri)\n getACL(doc2, function (ok, status, defaultACLDoc: any): NamedNode | void {\n if (!ok) {\n return callbackFunction(\n false,\n true,\n status as number,\n `( No ACL pointer ${uri} ${status})${defaultACLDoc}`\n ) as void\n } else if (status === 403) {\n return callbackFunction(\n false,\n true,\n status,\n `( default ACL file FORBIDDEN. Stop.${uri})`\n )\n } else if (status === 404) {\n return tryParent(uri)\n } else if (status !== 200) {\n return callbackFunction(\n false,\n true,\n status as number,\n `Error status '${status}' searching for default for ${doc2}`\n )\n }\n // 200\n // statusBlock.textContent += (\" ACCESS set at \" + uri + \". End search.\")\n const defaults = kb\n .each(undefined, ACL('default'), kb.sym(uri), defaultACLDoc)\n .concat(\n kb.each(undefined, ACL('defaultForNew'), kb.sym(uri), defaultACLDoc)\n )\n if (!defaults.length) {\n return tryParent(uri) // Keep searching\n }\n const defaultHolder = kb.sym(uri)\n return callbackFunction(\n true,\n false,\n doc,\n aclDoc as NamedNode,\n defaultHolder,\n defaultACLDoc as NamedNode\n )\n })\n } // tryParent\n\n if (!ok) {\n return callbackFunction(\n false,\n false,\n status as number,\n `Error accessing Access Control information for ${doc}) ${message}`\n )\n } else if (status === 404) {\n tryParent(doc.uri) // @@ construct default one - the server should do that\n } else if (status === 403) {\n return callbackFunction(\n false,\n false,\n status,\n `(Sharing not available to you)${message}`\n )\n } else if (status !== 200) {\n return callbackFunction(\n false,\n false,\n status as number,\n `Error ${status} accessing Access Control information for ${doc}: ${message}`\n )\n } else {\n // 200\n return callbackFunction(true, true, doc, aclDoc as NamedNode)\n }\n }) // Call to getACL\n}\n\n/**\n * Calls back `(ok, status, acldoc, message)` as follows\n *\n * * `(false, 900, errormessage)` if no link header\n * * `(true, 403, documentSymbol, fileaccesserror)` if not authorized\n * * `(true, 404, documentSymbol, fileaccesserror)` if does not exist\n * * `(true, 200, documentSymbol)` if file exists and read OK\n */\nexport function getACL (\n doc: NamedNode,\n callbackFunction: (\n ok: boolean,\n messageOrStatus: number | string,\n messageOrDoc?: NamedNode | string,\n message?: string\n ) => void\n): void {\n if (!kb.fetcher) {\n throw new Error('kb has no fetcher')\n }\n kb.fetcher.nowOrWhenFetched(doc, undefined, function (ok, body) {\n if (!ok) {\n return callbackFunction(ok, `Can't get headers to find ACL for ${doc}: ${body}`)\n }\n const aclDoc = kb.any(\n doc,\n ACL_LINK\n ) // @@ check that this get set by web.js\n if (!aclDoc) {\n callbackFunction(false, 900, `No Link rel=ACL header for ${doc}`)\n } else {\n if (!kb.fetcher) {\n throw new Error('kb has no fetcher')\n }\n if (kb.fetcher.nonexistent[aclDoc.value]) {\n return callbackFunction(\n true,\n 404,\n aclDoc as NamedNode,\n `ACL file ${aclDoc} does not exist.`\n )\n }\n kb.fetcher.nowOrWhenFetched(aclDoc as NamedNode, undefined, function (\n ok,\n message,\n response\n ) {\n if (!ok) {\n callbackFunction(\n true,\n response.status,\n aclDoc as NamedNode,\n `Can't read Access Control File ${aclDoc}: ${message}`\n )\n } else {\n callbackFunction(true, 200, aclDoc as NamedNode)\n }\n })\n }\n })\n}\n\n/**\n * Calls [[getACLorDefault]] and then (?)\n */\nexport async function getProspectiveHolder (targetDirectory: string): Promise<NamedNode | undefined> {\n return new Promise((resolve, reject) => getACLorDefault(sym(targetDirectory), (\n ok,\n isDirectACL,\n targetDoc,\n targetACLDoc,\n defaultHolder\n ) => {\n if (ok) {\n return resolve((isDirectACL ? targetDoc : defaultHolder) as NamedNode)\n }\n return reject(new Error(`Error loading ${targetDirectory}`))\n }))\n}\n"],"mappings":"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","ignoreList":[]}
|