Skip to content

Commit ba3defa

Browse files
committed
feat: made N3 ruleset configurable
Signed-off-by: Wouter Termont <wouter.termont@ugent.be>
1 parent b444753 commit ba3defa

7 files changed

Lines changed: 21 additions & 8 deletions

File tree

packages/uma/bin/demo.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ export const launch: () => Promise<void> = async () => {
2121
variables['urn:uma:variables:baseUrl'] = baseUrl;
2222

2323
// variables['urn:uma:variables:policyDir'] = path.join(rootDir, './config/rules/policy');
24+
variables['urn:uma:variables:rulesDir'] = path.join(rootDir, './config/rules/n3');
2425

2526
variables['urn:uma:variables:mainModulePath'] = rootDir;
2627
variables['urn:uma:variables:customConfigPath'] = path.join(rootDir, './config/demo.json');

packages/uma/bin/main.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ export const launch: () => Promise<void> = async () => {
2121
variables['urn:uma:variables:baseUrl'] = baseUrl;
2222

2323
variables['urn:uma:variables:policyDir'] = path.join(rootDir, './config/rules/policy');
24+
variables['urn:uma:variables:rulesDir'] = path.join(rootDir, './config/rules/n3');
2425

2526
variables['urn:uma:variables:mainModulePath'] = rootDir;
2627
variables['urn:uma:variables:customConfigPath'] = path.join(rootDir, './config/default.json');

packages/uma/config/policies/authorizers/default.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,10 @@
3535
"fallback": {
3636
"@id": "urn:uma:default:PolicyBasedAuthorizer",
3737
"@type": "PolicyBasedAuthorizer",
38-
"n3Rules": "config/rules/crud.n3",
39-
"rules": {
38+
"rulesDir": {
39+
"@id": "urn:uma:variables:rulesDir"
40+
},
41+
"policies": {
4042
"@id": "urn:uma:default:RulesStorage",
4143
"@type": "DirectoryUCRulesStorage",
4244
"directoryPath": {

demo/purpose-time.n3 renamed to packages/uma/config/rules/n3/purpose-time.n3

File renamed without changes.

packages/uma/config/variables/default.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,11 @@
2121
"comment": "Path to the directory containing the policy rules.",
2222
"@id": "urn:uma:variables:policyDir",
2323
"@type": "Variable"
24+
},
25+
{
26+
"comment": "Path to the directory containing the N3 rules.",
27+
"@id": "urn:uma:variables:rulesDir",
28+
"@type": "Variable"
2429
}
2530
]
2631
}

packages/uma/src/policies/authorizers/PolicyBasedAuthorizer.ts

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { ClaimSet } from '../../credentials/ClaimSet';
77
import { DirectoryUCRulesStorage, PolicyExecutor, UconRequest,
88
UcpPatternEnforcement, UcpPlugin, UCRulesStorage } from '@solidlab/ucp';
99
import { EyeJsReasoner } from "koreografeye";
10-
import { readFileSync } from 'fs';
10+
import { lstatSync, readFileSync, readdirSync } from 'fs';
1111
import path from 'path';
1212
import { UNSOLVABLE, WEBID } from '../../credentials/Claims';
1313

@@ -21,7 +21,6 @@ export class PolicyBasedAuthorizer implements Authorizer {
2121
private plugins = { "http://example.org/dataUsage": new UcpPlugin() };
2222
private executor = new PolicyExecutor(this.plugins);
2323
private enforcer: UcpPatternEnforcement;
24-
private n3: string;
2524

2625
/**
2726
* Creates a PublicNamespaceAuthorizer with the given public namespaces.
@@ -32,11 +31,16 @@ export class PolicyBasedAuthorizer implements Authorizer {
3231
constructor(
3332
// protected rules: UCRulesStorage,
3433
// protected enforcer: UcpPatternEnforcement
35-
rules: UCRulesStorage,
36-
n3Rules: string,
34+
policies: UCRulesStorage,
35+
rulesDir: string,
3736
) {
38-
this.n3 = readFileSync(path.join(__dirname, '../../../', n3Rules)).toString();
39-
this.enforcer = new UcpPatternEnforcement(rules, [this.n3], this.reasoner, this.executor)
37+
if (!lstatSync(rulesDir).isDirectory()) {
38+
throw Error(`${rulesDir} does not resolve to a directory`)
39+
}
40+
const ruleSet = readdirSync(rulesDir).map(file => {
41+
return readFileSync(path.join(rulesDir, file)).toString();
42+
});
43+
this.enforcer = new UcpPatternEnforcement(policies, ruleSet, this.reasoner, this.executor)
4044
}
4145

4246

0 commit comments

Comments
 (0)