Skip to content

Commit 8e118b9

Browse files
check acl:trustedApp in owner profiles
1 parent b32e884 commit 8e118b9

File tree

2 files changed

+32
-15
lines changed

2 files changed

+32
-15
lines changed

src/acl-check.js

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -44,17 +44,21 @@ function accessDenied (kb, doc, directory, aclDoc, agent, modesRequired, origin,
4444
return ok
4545
}
4646

47-
async function getTrustedModesForOrigin (kb, agent, origin) {
48-
if (!kb || !agent || !origin) {
49-
return Promise.resolve([])
50-
}
51-
const result = await query(`
47+
async function getTrustedModesForOrigin (kb, aclDoc, doc, origin) {
48+
const docAuths = kb.each(null, ACL('accessTo'), doc, aclDoc)
49+
const ownerAuths = docAuths.filter(auth => kb.holds(auth, ACL('mode'), ACL('Control'), aclDoc))
50+
const owners = ownerAuths.reduce((acc, auth) => acc.concat(kb.each(auth, ACL('agent'))), []) // owners
51+
const result = await Promise.all(owners.map(owner => query(`
5252
SELECT ?mode WHERE {
53-
${agent} ${ACL('trustedApp')} ?trustedOrigin.
53+
${owners} ${ACL('trustedApp')} ?trustedOrigin.
5454
?trustedOrigin ${ACL('origin')} ${origin};
5555
${ACL('mode')} ?mode .
56-
}`, kb)
57-
const trustedModes = result.map(result => result['?mode'])
56+
}`, kb)))
57+
let trustedModes = []
58+
result.map(ownerResults => ownerResults.map(entry => {
59+
console.log('entry', entry['?mode'])
60+
trustedModes.push(entry['?mode'])
61+
}))
5862
return Promise.resolve(trustedModes)
5963
}
6064

test/unit/get-trusted-modes-for-origin-test.js

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,23 +7,36 @@ const $rdf = require('rdflib')
77
const ACL = $rdf.Namespace('http://www.w3.org/ns/auth/acl#')
88
const ALICE = $rdf.Namespace('https://alice.example.com/')
99
const alice = ALICE('#me')
10+
const BOB = $rdf.Namespace('https://bob.example.com/')
11+
const bob = BOB('#me')
1012

1113
const prefixes = `
1214
@prefix acl: ${ACL()} .
1315
@prefix alice: ${ALICE('#')} .
1416
`
1517

16-
test('aclCheck getTrustedModesForOrigin() getting trusted modes from agentStore', t => {
18+
test('aclCheck getTrustedModesForOrigin() getting trusted modes from publisherStore', t => {
1719
const origin = $rdf.sym('https://apps.example.com')
18-
const agent = alice
19-
const agentStore = $rdf.graph()
20-
const agentText = `${prefixes}
21-
${agent} acl:trustedApp [ acl:origin ${origin};
20+
const doc = ALICE('some/doc.txt')
21+
const aclDoc = ALICE('some/doc.txt.acl')
22+
const publisher = alice
23+
const requester = bob
24+
const publisherStore = $rdf.graph()
25+
const aclFileText = `${prefixes}
26+
<#owner>
27+
a acl:Authorization;
28+
acl:agent ${publisher};
29+
acl:accessTo ${doc};
30+
acl:mode acl:Control.
31+
`
32+
$rdf.parse(aclFileText, publisherStore, aclDoc.uri, 'text/turtle')
33+
const publisherText = `${prefixes}
34+
${publisher} acl:trustedApp [ acl:origin ${origin};
2235
acl:mode acl:Read, acl:Write].
2336
`
24-
$rdf.parse(agentText, agentStore, agent.uri, 'text/turtle')
37+
$rdf.parse(publisherText, publisherStore, publisher.uri, 'text/turtle')
2538

26-
aclLogic.getTrustedModesForOrigin(agentStore, agent, origin).then(result => {
39+
aclLogic.getTrustedModesForOrigin(publisherStore, aclDoc, doc, origin).then(result => {
2740
t.deepEqual(result, [ACL('Read'), ACL('Write')], 'Should get a list of modes')
2841
t.end()
2942
})

0 commit comments

Comments
 (0)