From a8b917cf52f001faf102bf75a40b3354ae6be4be Mon Sep 17 00:00:00 2001 From: Arne Hassel Date: Sat, 2 Mar 2019 21:44:02 +0100 Subject: [PATCH 1/7] Redo #1122 on top of latest release branch --- lib/acl-checker.js | 23 +++++++++- test/integration/authentication-oidc-test.js | 44 +++++++++++++++++++ ...idc-with-strict-origins-turned-off-test.js | 43 ++++++++++++++++++ .../accounts-scenario/alice/profile/card$.ttl | 4 ++ .../alice/profile/card$.ttl | 4 ++ 5 files changed, 117 insertions(+), 1 deletion(-) create mode 100644 test/resources/accounts-scenario/alice/profile/card$.ttl create mode 100644 test/resources/accounts-strict-origin-off/alice/profile/card$.ttl diff --git a/lib/acl-checker.js b/lib/acl-checker.js index 44c0ae883..d91404036 100644 --- a/lib/acl-checker.js +++ b/lib/acl-checker.js @@ -57,7 +57,8 @@ class ACLChecker { const modes = [ACL(mode)] const agentOrigin = this.agentOrigin const trustedOrigins = this.trustedOrigins - const accessDenied = aclCheck.accessDenied(acl.graph, resource, directory, aclFile, agent, modes, agentOrigin, trustedOrigins) + const originTrustedModes = agent && agentOrigin ? await this.getOriginTrustedModes(agent, agentOrigin) : [] + const accessDenied = aclCheck.accessDenied(acl.graph, resource, directory, aclFile, agent, modes, agentOrigin, trustedOrigins, originTrustedModes) if (accessDenied && user) { this.messagesCached[cacheKey].push(HTTPError(403, accessDenied)) @@ -68,6 +69,26 @@ class ACLChecker { return this.aclCached[cacheKey] } + async getOriginTrustedModes (agent, agentOrigin) { + let agentStore + try { + this.requests[agent.uri] = this.requests[agent.uri] || this.fetch(agent.uri) + agentStore = await this.requests[agent.uri] + } catch (err) { + if (err && (err.code === 'ENOENT' || err.status === 404)) { + // If we're unable to resolve the agent, we conclude that origin has no trusted modes + this.requests[agent.uri] = Promise.resolve(null) + return Promise.resolve([]) + } + debug(err) + throw err + } + if (agentStore) { + return aclCheck.getTrustedModesForOrigin(agentStore, agent, agentOrigin) + } + return Promise.resolve([]) + } + async getError (user, mode) { const cacheKey = `${mode}-${user}` this.aclCached[cacheKey] = this.aclCached[cacheKey] || this.can(user, mode) diff --git a/test/integration/authentication-oidc-test.js b/test/integration/authentication-oidc-test.js index 53827f5f7..56a567dc9 100644 --- a/test/integration/authentication-oidc-test.js +++ b/test/integration/authentication-oidc-test.js @@ -35,6 +35,8 @@ describe('Authentication API (OIDC)', () => { let bobDbPath = path.join(__dirname, '../resources/accounts-scenario/bob/db') + const trustedAppUri = 'https://trusted.app' + const serverConfig = { sslKey: path.join(__dirname, '../keys/key.pem'), sslCert: path.join(__dirname, '../keys/cert.pem'), @@ -437,6 +439,48 @@ describe('Authentication API (OIDC)', () => { expect(response).to.have.property('status', 401) }) }) + + describe('with trusted app and no cookie', () => { + before(done => { + alice.get('/private-for-alice.txt') + .set('Origin', trustedAppUri) + .end((err, res) => { + response = res + done(err) + }) + }) + + it('should return a 401', () => expect(response).to.have.property('status', 401)) + }) + + describe('with trusted app and malicious cookie', () => { + before(done => { + var malcookie = cookie.replace(/connect\.sid=(\S+)/, 'connect.sid=l33th4x0rzp0wn4g3;') + alice.get('/private-for-alice.txt') + .set('Cookie', malcookie) + .set('Origin', trustedAppUri) + .end((err, res) => { + response = res + done(err) + }) + }) + + it('should return a 401', () => expect(response).to.have.property('status', 401)) + }) + + describe('with trusted app and correct cookie', () => { + before(done => { + alice.get('/private-for-alice.txt') + .set('Cookie', cookie) + .set('Origin', trustedAppUri) + .end((err, res) => { + response = res + done(err) + }) + }) + + it('should return a 200', () => expect(response).to.have.property('status', 200)) + }) }) }) diff --git a/test/integration/authentication-oidc-with-strict-origins-turned-off-test.js b/test/integration/authentication-oidc-with-strict-origins-turned-off-test.js index f61ca8ab6..7cf97db3a 100644 --- a/test/integration/authentication-oidc-with-strict-origins-turned-off-test.js +++ b/test/integration/authentication-oidc-with-strict-origins-turned-off-test.js @@ -35,6 +35,8 @@ describe('Authentication API (OIDC) - With strict origins turned off', () => { const bobServerUri = `https://localhost:${bobServerPort}` let bobDbPath = path.join(__dirname, '../resources/accounts-strict-origin-off/bob/db') + const trustedAppUri = 'https://trusted.app' + const serverConfig = { sslKey: path.join(__dirname, '../keys/key.pem'), sslCert: path.join(__dirname, '../keys/cert.pem'), @@ -194,6 +196,18 @@ describe('Authentication API (OIDC) - With strict origins turned off', () => { }) }) + it('should return a 401', () => expect(response).to.have.property('status', 401)) + }) + describe('and trusted app', () => { + before(done => { + alice.get('/private-for-alice.txt') + .set('Origin', trustedAppUri) + .end((err, res) => { + response = res + done(err) + }) + }) + it('should return a 401', () => expect(response).to.have.property('status', 401)) }) }) @@ -251,6 +265,21 @@ describe('Authentication API (OIDC) - With strict origins turned off', () => { // Even if origin checking is disabled, then this should return a 401 because cookies should not be trusted cross-origin it('should return a 401', () => expect(response).to.have.property('status', 401)) }) + + describe('and trusted app', () => { + // Trusted apps are not supported when strictOrigin check is turned off + before(done => { + alice.get('/private-for-alice.txt') + .set('Cookie', cookie) + .set('Origin', trustedAppUri) + .end((err, res) => { + response = res + done(err) + }) + }) + + it('should return a 401', () => expect(response).to.have.property('status', 401)) + }) }) describe('with malicious cookie', () => { @@ -310,6 +339,20 @@ describe('Authentication API (OIDC) - With strict origins turned off', () => { it('should return a 401', () => expect(response).to.have.property('status', 401)) }) + + describe('and trusted app', () => { + before(done => { + alice.get('/private-for-alice.txt') + .set('Cookie', malcookie) + .set('Origin', trustedAppUri) + .end((err, res) => { + response = res + done(err) + }) + }) + + it('should return a 401', () => expect(response).to.have.property('status', 401)) + }) }) }) }) diff --git a/test/resources/accounts-scenario/alice/profile/card$.ttl b/test/resources/accounts-scenario/alice/profile/card$.ttl new file mode 100644 index 000000000..a014d960e --- /dev/null +++ b/test/resources/accounts-scenario/alice/profile/card$.ttl @@ -0,0 +1,4 @@ +@prefix acl: . + +<#me> acl:trustedApp [ acl:origin ; + acl:mode acl:Read, acl:Write, acl:Append, acl:Control]. diff --git a/test/resources/accounts-strict-origin-off/alice/profile/card$.ttl b/test/resources/accounts-strict-origin-off/alice/profile/card$.ttl new file mode 100644 index 000000000..a014d960e --- /dev/null +++ b/test/resources/accounts-strict-origin-off/alice/profile/card$.ttl @@ -0,0 +1,4 @@ +@prefix acl: . + +<#me> acl:trustedApp [ acl:origin ; + acl:mode acl:Read, acl:Write, acl:Append, acl:Control]. From c328a3e7979c3589b68639b69bfdd662d359cafe Mon Sep 17 00:00:00 2001 From: Michiel de Jong Date: Wed, 13 Mar 2019 17:15:21 +0100 Subject: [PATCH 2/7] My changes on top of #1122 --- lib/acl-checker.js | 31 ++++++-------------- test/integration/authentication-oidc-test.js | 8 ++--- 2 files changed, 13 insertions(+), 26 deletions(-) diff --git a/lib/acl-checker.js b/lib/acl-checker.js index d91404036..632f2ff28 100644 --- a/lib/acl-checker.js +++ b/lib/acl-checker.js @@ -57,9 +57,16 @@ class ACLChecker { const modes = [ACL(mode)] const agentOrigin = this.agentOrigin const trustedOrigins = this.trustedOrigins - const originTrustedModes = agent && agentOrigin ? await this.getOriginTrustedModes(agent, agentOrigin) : [] + let originTrustedModes = [] + try { + this.fetch(aclFile.doc().value) + originTrustedModes = await aclCheck.getTrustedModesForOrigin(acl.graph, resource, directory, aclFile, agentOrigin, (uriNode) => { + return this.fetch(uriNode.doc().value, acl.graph) + }) + } catch (e) { + console.error(e.message) + } const accessDenied = aclCheck.accessDenied(acl.graph, resource, directory, aclFile, agent, modes, agentOrigin, trustedOrigins, originTrustedModes) - if (accessDenied && user) { this.messagesCached[cacheKey].push(HTTPError(403, accessDenied)) } else if (accessDenied) { @@ -69,26 +76,6 @@ class ACLChecker { return this.aclCached[cacheKey] } - async getOriginTrustedModes (agent, agentOrigin) { - let agentStore - try { - this.requests[agent.uri] = this.requests[agent.uri] || this.fetch(agent.uri) - agentStore = await this.requests[agent.uri] - } catch (err) { - if (err && (err.code === 'ENOENT' || err.status === 404)) { - // If we're unable to resolve the agent, we conclude that origin has no trusted modes - this.requests[agent.uri] = Promise.resolve(null) - return Promise.resolve([]) - } - debug(err) - throw err - } - if (agentStore) { - return aclCheck.getTrustedModesForOrigin(agentStore, agent, agentOrigin) - } - return Promise.resolve([]) - } - async getError (user, mode) { const cacheKey = `${mode}-${user}` this.aclCached[cacheKey] = this.aclCached[cacheKey] || this.can(user, mode) diff --git a/test/integration/authentication-oidc-test.js b/test/integration/authentication-oidc-test.js index 56a567dc9..c6ebc9c0c 100644 --- a/test/integration/authentication-oidc-test.js +++ b/test/integration/authentication-oidc-test.js @@ -3,10 +3,10 @@ const path = require('path') const fs = require('fs-extra') const { UserStore } = require('@solid/oidc-auth-manager') const UserAccount = require('../../lib/models/user-account') -const SolidAuthOIDC = require('@solid/solid-auth-oidc') +// const SolidAuthOIDC = require('@solid/solid-auth-oidc') -const fetch = require('node-fetch') -const localStorage = require('localstorage-memory') +// const fetch = require('node-fetch') +// const localStorage = require('localstorage-memory') const URL = require('whatwg-url').URL global.URL = URL global.URLSearchParams = require('whatwg-url').URLSearchParams @@ -20,7 +20,7 @@ chai.use(require('dirty-chai')) // In this test we always assume that we are Alice describe('Authentication API (OIDC)', () => { - let alice, bob + let alice, bob // eslint-disable-line no-unused-vars let aliceServerUri = 'https://localhost:7000' let aliceWebId = 'https://localhost:7000/profile/card#me' From 4927b97b7b1961b3596c5f743474ea0371d4837f Mon Sep 17 00:00:00 2001 From: Michiel de Jong Date: Fri, 15 Mar 2019 13:21:04 +0100 Subject: [PATCH 3/7] Update CHANGELOG for v5 release --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 541ca77fb..d250c0fc2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,12 +21,17 @@ - The browser-reported `Origin` header will now be checked by default, and the ACL system can be used to restrict access to applications for added security. + - Users can add `trustedApp` entries to their profile using a new databrowser pane. + You will see an 'A' icon added while you view a Person's profile URL + with the data browser (might have to hit refresh in your browser and make sure you + are viewing a WebId URL like https://localhost:8443/profile/card#me). - Logging is now verbose by default so the `-v` option has been removed and a `--quiet` option has been added to mute the log. - To be bug compliant with 4.x releases, if a rule for public readable root / does not exist, it will check in /index.html.acl (see issue #1063) - Command line options are now kebab-cased rather than camelCased, config options may be both. +- Resource with no extension now have '$.ttl' appended in the filename (see upgrades notes below). - Many smaller fixes. #### 5.0.0 Upgrade Notes From 6982ec12646742ef9375fa42f46b8962991acfca Mon Sep 17 00:00:00 2001 From: Michiel de Jong Date: Fri, 15 Mar 2019 13:31:58 +0100 Subject: [PATCH 4/7] Use mashlib 0.7.18 and acl-check 0.2.0 --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 80f18a868..5434b3345 100644 --- a/package.json +++ b/package.json @@ -56,7 +56,7 @@ "bugs": "https://github.com/solid/node-solid-server/issues", "dependencies": { "@solid/oidc-auth-manager": "^0.17.1", - "@solid/acl-check": "^0.1.3", + "@solid/acl-check": "^0.2.0", "body-parser": "^1.18.3", "bootstrap": "^3.3.7", "busboy": "^0.2.12", @@ -82,7 +82,7 @@ "ip-range-check": "0.0.2", "is-ip": "^2.0.0", "li": "^1.0.1", - "mashlib": "^0.7.15", + "mashlib": "^0.7.18", "mime-types": "^2.1.11", "negotiator": "^0.6.0", "node-fetch": "^2.1.2", From ef9e8c90ba44e68985d6f638847053712078baa1 Mon Sep 17 00:00:00 2001 From: Michiel de Jong Date: Fri, 15 Mar 2019 13:39:37 +0100 Subject: [PATCH 5/7] fix commented-out requires in test --- test/integration/authentication-oidc-test.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/integration/authentication-oidc-test.js b/test/integration/authentication-oidc-test.js index c6ebc9c0c..e2153a946 100644 --- a/test/integration/authentication-oidc-test.js +++ b/test/integration/authentication-oidc-test.js @@ -3,10 +3,10 @@ const path = require('path') const fs = require('fs-extra') const { UserStore } = require('@solid/oidc-auth-manager') const UserAccount = require('../../lib/models/user-account') -// const SolidAuthOIDC = require('@solid/solid-auth-oidc') +const SolidAuthOIDC = require('@solid/solid-auth-oidc') -// const fetch = require('node-fetch') -// const localStorage = require('localstorage-memory') +const fetch = require('node-fetch') +const localStorage = require('localstorage-memory') const URL = require('whatwg-url').URL global.URL = URL global.URLSearchParams = require('whatwg-url').URLSearchParams From c8efa90ecd0785f8a28d8eac322ab90bae3e975f Mon Sep 17 00:00:00 2001 From: Michiel de Jong Date: Fri, 15 Mar 2019 15:17:05 +0100 Subject: [PATCH 6/7] package-lock.json --- package-lock.json | 94 +++++++++++++++++++++++++---------------------- 1 file changed, 50 insertions(+), 44 deletions(-) diff --git a/package-lock.json b/package-lock.json index 433505a8c..4df197663 100644 --- a/package-lock.json +++ b/package-lock.json @@ -220,9 +220,9 @@ "dev": true }, "@solid/acl-check": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@solid/acl-check/-/acl-check-0.1.3.tgz", - "integrity": "sha512-Rvdxn7SOlqo1BtiY6dcFlJAjne0QK1hrsFL1q3HUDg7yleOEXBm1ESyZ0XDM6jwqJHqKf+0l987D15k5MPyIng==", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@solid/acl-check/-/acl-check-0.2.0.tgz", + "integrity": "sha512-HjnwnpjvqE16k5yBNG0A7WIX9MveELv3Ge0DOJ8Cpt7e6aJ4sOpzY3A6x+ljOCOdxxT6CpGKhNGEdztZMGm1Qg==", "requires": { "rdflib": "^0.12.1", "solid-namespace": "0.1.0" @@ -1944,9 +1944,9 @@ "integrity": "sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs=" }, "caniuse-lite": { - "version": "1.0.30000911", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000911.tgz", - "integrity": "sha512-x/E/SNwD80I0bT+fF9Y3Kbwo7Xd1xSafCAmFlpJmaVg3SQoJJOH4Ivb9fi9S0WjfqewQ6Ydt1zEVZpmMVYNeDA==" + "version": "1.0.30000948", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000948.tgz", + "integrity": "sha512-Lw4y7oz1X5MOMZm+2IFaSISqVVQvUuD+ZUSfeYK/SlYiMjkHN/eJ2PDfJehW5NA6JjrxYSSnIWfwjeObQMEjFQ==" }, "capture-stack-trace": { "version": "1.0.1", @@ -1998,16 +1998,16 @@ "dev": true }, "chat-pane": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/chat-pane/-/chat-pane-1.2.6.tgz", - "integrity": "sha512-+zPpE2zVgg4wNhb2+NxmqhEu+OXmlAEPKoHmoKXRr8oUrQOlSFWkr8jtZKuQwukziC4FltvY2u0rYRfro4KDyQ==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/chat-pane/-/chat-pane-1.2.7.tgz", + "integrity": "sha512-itsMQWUNjajgdEiTNaRMl/7y9FEpCNrPNldfu+Dj+iJPE5Y0OIBOwzx6hoyItiJYsQSfMcsFiGss2Ie5U4YZtQ==", "requires": { "babel-preset-env": "^1.6.1", "babel-preset-metalab": "^1.0.0", "mime-types": "^2.1.13", "pane-registry": ">1.0.0", "rdflib": ">=0.17.0", - "solid-ui": ">=0.11.3" + "solid-ui": ">=0.12.0" } }, "check-error": { @@ -2336,9 +2336,9 @@ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" }, "core-js": { - "version": "2.5.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz", - "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==" + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.5.tgz", + "integrity": "sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A==" }, "core-util-is": { "version": "1.0.2", @@ -2868,9 +2868,9 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "electron-to-chromium": { - "version": "1.3.84", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.84.tgz", - "integrity": "sha512-IYhbzJYOopiTaNWMBp7RjbecUBsbnbDneOP86f3qvS0G0xfzwNSvMJpTrvi5/Y1gU7tg2NAgeg8a8rCYvW9Whw==" + "version": "1.3.116", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.116.tgz", + "integrity": "sha512-NKwKAXzur5vFCZYBHpdWjTMO8QptNLNP80nItkSIgUOapPAo9Uia+RvkCaZJtO7fhQaVElSvBPWEc2ku6cKsPA==" }, "elliptic": { "version": "6.4.1", @@ -3564,9 +3564,9 @@ } }, "find-babel-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/find-babel-config/-/find-babel-config-1.1.0.tgz", - "integrity": "sha1-rMAQQ6Z0n+w0Qpvmtk9ULrtdY1U=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/find-babel-config/-/find-babel-config-1.2.0.tgz", + "integrity": "sha512-jB2CHJeqy6a820ssiqwrKMeyC6nNdmrcgkKWJWmpoxpE8RKciYJXCcXRq1h2AzCo5I5BJeN2tkGEO3hLTuePRA==", "requires": { "json5": "^0.5.1", "path-exists": "^3.0.0" @@ -4642,14 +4642,14 @@ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, "issue-pane": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/issue-pane/-/issue-pane-1.0.3.tgz", - "integrity": "sha512-K/r9weoQexIFiG9vvYygzHF5IPNbKZluBZ1hERDU2sTlLsAnRKGJ9ms0Xb/Yn+MF9tYt82rno3E6OE3+satpPQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/issue-pane/-/issue-pane-1.0.4.tgz", + "integrity": "sha512-wxDXpwmq4DQ2Fb6aRsNpFhaWTtcfnx6n+puOM5fHih1Im8gHy8C+qvufNgqfq1SlipFzskXOc8Cre61tj4xEuA==", "requires": { "babel-preset-env": "^1.6.1", "babel-preset-metalab": "^1.0.0", "mime-types": "^2.1.13", - "pane-registry": ">=1.0.0", + "pane-registry": "^1.0.4", "rdflib": ">=0.17.0", "solid-ui": ">=0.11.3" } @@ -5047,12 +5047,12 @@ } }, "mashlib": { - "version": "0.7.17", - "resolved": "https://registry.npmjs.org/mashlib/-/mashlib-0.7.17.tgz", - "integrity": "sha512-asVogWGHOSaFkEb1YZZL+qOGHv26m8IaYBy83E5HYbXw0DaUA11FXxK3+hC+d1ite3y+d66JLvOZ5CyrXELQwg==", + "version": "0.7.18", + "resolved": "https://registry.npmjs.org/mashlib/-/mashlib-0.7.18.tgz", + "integrity": "sha512-PeZSqIX31WRq4WBmhUylguSHK4pyHmRduhvasumbO2FW5gvsG5QvypRQKkc4BBQtSBgh9ozE8C0ktOYU0fVpog==", "requires": { "rdflib": ">=0.19.1", - "solid-panes": ">=1.1.19" + "solid-panes": ">=1.3.1" }, "dependencies": { "rdflib": { @@ -5085,9 +5085,9 @@ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" }, "meeting-pane": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/meeting-pane/-/meeting-pane-1.0.2.tgz", - "integrity": "sha512-TKroX1nW9RTHKH0pULY38vFV0HL0Bgy600bPT6mori6YINCfyw09LgkbinJX9PYYVw6t6x0ZEwWAP4gc60p/kg==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/meeting-pane/-/meeting-pane-1.0.4.tgz", + "integrity": "sha512-mOaWBr1p0tUfzlyDYSeZOV7M6B3kegohhqAy/auTcgi/8papnSxtME5lRyqrvmlJoXO5vsPFPDnvbeevWWfmsg==", "requires": { "babel-preset-env": "^1.6.1", "babel-preset-metalab": "^1.0.0", @@ -8588,36 +8588,37 @@ } }, "solid-panes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/solid-panes/-/solid-panes-1.2.0.tgz", - "integrity": "sha512-JjdYi0KjVYCA5aOqs4UA/aU9ZISkdO4TWpGv7btfDQQGc+cBoXdSRwlufqFGHz3SrzBnqc0JJvmHsCvEQ4FREw==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/solid-panes/-/solid-panes-1.3.1.tgz", + "integrity": "sha512-SGw98zxvsp9gNzi1pv7jPWC4+O3e4xySPePFipBA7WN6BlCPweOlg+7Bm6xp7kj0jFSydu3+ckdM78W/xxuKKQ==", "requires": { "@solid/better-simple-slideshow": "^0.1.0", "babel-preset-env": "^1.6.1", "babel-preset-metalab": "^1.0.0", - "chat-pane": "^1.2.6", + "chat-pane": ">=1.2.7", "contacts-pane": "^1.0.3", "folder-pane": "^1.0.4", - "issue-pane": "^1.0.3", - "meeting-pane": "^1.0.2", + "issue-pane": "^1.0.4", + "meeting-pane": "^1.0.4", "mime-types": "^2.1.13", "pane-registry": "^1.0.4", "rdflib": ">=0.17.1", - "solid-ui": ">=0.11.5", + "solid-ui": ">=0.12.0", "source-pane": "^1.0.3" } }, "solid-ui": { - "version": "0.11.12", - "resolved": "https://registry.npmjs.org/solid-ui/-/solid-ui-0.11.12.tgz", - "integrity": "sha512-Cw2EEbooJnOlCuny3VmPVaPZ6byaQq3EA67B/j2mUhNJvQOtT1bHtqey6veeF9e8LMzBH3ndVeBCdf2awPfD/A==", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/solid-ui/-/solid-ui-0.12.0.tgz", + "integrity": "sha512-ImiLiBE0SZP61kZ5dWweDRKQPxHYTFI8Jmxsz4yQIyPVcQB9SGM0Tdchz4zmSDRPvuw8GRFsC3USIHwIuvxj2g==", "requires": { "escape-html": "^1.0.3", + "mime-types": "^2.1.20", "node-uuid": "^1.4.7", - "rdflib": ">=0.19.0", - "regenerate": "^1.3.2", - "solid-auth-client": "^2.2.6", - "solid-auth-tls": "^0.1.2" + "rdflib": "^0.19.1", + "solid-auth-client": "^2.2.13", + "solid-auth-tls": "^0.1.2", + "solid-namespace": "0.2.0" }, "dependencies": { "node-uuid": { @@ -8636,6 +8637,11 @@ "solid-auth-client": "^2.2.3", "xmldom": "^0.1.22" } + }, + "solid-namespace": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/solid-namespace/-/solid-namespace-0.2.0.tgz", + "integrity": "sha512-yQGQlTNDVtcMfzLz7OwL6Z8lJy9rN1ep0MgX28DPcja0DtA5pu1MzTpBVD9kvXl9X6eSEX73I7IYt0cUim0DrA==" } } }, From a5d3ad5594510174779260c80889e8780819c0c8 Mon Sep 17 00:00:00 2001 From: Michiel de Jong Date: Fri, 15 Mar 2019 15:36:29 +0100 Subject: [PATCH 7/7] refer to https://github.com/solid/acl-check/issues/23 --- lib/acl-checker.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/acl-checker.js b/lib/acl-checker.js index 632f2ff28..be3260582 100644 --- a/lib/acl-checker.js +++ b/lib/acl-checker.js @@ -64,7 +64,8 @@ class ACLChecker { return this.fetch(uriNode.doc().value, acl.graph) }) } catch (e) { - console.error(e.message) + // FIXME: https://github.com/solid/acl-check/issues/23 + // console.error(e.message) } const accessDenied = aclCheck.accessDenied(acl.graph, resource, directory, aclFile, agent, modes, agentOrigin, trustedOrigins, originTrustedModes) if (accessDenied && user) {