219 lines
5.8 KiB
JavaScript
219 lines
5.8 KiB
JavaScript
require('dotenv').config({ quiet: true })
|
|
const {
|
|
jlincInit,
|
|
jlincProduceEvent,
|
|
jlincProcessEvent,
|
|
jlincProduceAgreement,
|
|
jlincProcessAgreement,
|
|
} = require("../src/index.js");
|
|
|
|
const printResults = true;
|
|
|
|
function generateRandomString(length) {
|
|
const characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
|
|
let result = "";
|
|
const charactersLength = characters.length;
|
|
for (let i = 0; i < length; i++) {
|
|
result += characters.charAt(Math.floor(Math.random() * charactersLength));
|
|
}
|
|
return result;
|
|
}
|
|
|
|
async function main() {
|
|
const config = {
|
|
dataStoreApiUrl: process.env.JLINC_DATA_STORE_API_URL ?? "http://localhost:9090",
|
|
dataStoreApiKey: process.env.JLINC_DATA_STORE_API_KEY,
|
|
archiveApiUrl: process.env.JLINC_ARCHIVE_API_URL ?? "http://localhost:9090",
|
|
archiveApiKey: process.env.JLINC_ARCHIVE_API_KEY,
|
|
defaultAgreementId: "00000000-0000-0000-0000-000000000000",
|
|
systemPrefix: process.env.JLINC_SYSTEM_PREFIX ?? "TestJlinc",
|
|
debug: false,
|
|
}
|
|
jlincInit(config);
|
|
|
|
try {
|
|
|
|
let data;
|
|
let r;
|
|
|
|
// Define participants
|
|
const entity1 = generateRandomString(11);
|
|
const entity2 = generateRandomString(11);
|
|
|
|
console.log(`\nAction: Produce (create and sign) agreement`)
|
|
data = {
|
|
uri: 'http://localhost:9090/agreements/05c93a30cc699cfaee9185f23a5f68ffb12305acce1ca4b9444758fc4d594828',
|
|
validRoles: ['provider', 'user'],
|
|
purposes: ['testing'],
|
|
caveats: ['production'],
|
|
requiredSigners: [entity1],
|
|
signer: entity1,
|
|
role: 'provider',
|
|
}
|
|
r = await jlincProduceAgreement(data)
|
|
if (r) {
|
|
if (printResults) {
|
|
console.log(`Result:`)
|
|
console.log(`---------------------------------------------`)
|
|
console.log(JSON.stringify(r, null, 2))
|
|
console.log(`---------------------------------------------`)
|
|
}
|
|
if (r.created && r.processed) {
|
|
console.log('PASS')
|
|
} else {
|
|
throw new Error('FAIL')
|
|
}
|
|
}
|
|
const agreementId = r.created.agreementId
|
|
|
|
console.log(`\nAction: Process (cross sign) agreement`)
|
|
data = {
|
|
agreementId,
|
|
signer: entity2,
|
|
role: 'user',
|
|
}
|
|
r = await jlincProcessAgreement(data)
|
|
if (r) {
|
|
if (printResults) {
|
|
console.log(`Result:`)
|
|
console.log(`---------------------------------------------`)
|
|
console.log(JSON.stringify(r, null, 2))
|
|
console.log(`---------------------------------------------`)
|
|
}
|
|
if (r.auditData && r.auditData.audit.agreementId === agreementId) {
|
|
console.log('PASS')
|
|
} else {
|
|
throw new Error('FAIL')
|
|
}
|
|
}
|
|
|
|
console.log(`\nAction: Produce (create and sign) event for data to be sent`)
|
|
data = {
|
|
from: entity1,
|
|
to: entity2,
|
|
agreementId,
|
|
payload: {
|
|
data: "testing",
|
|
},
|
|
}
|
|
r = await jlincProduceEvent(data)
|
|
if (r) {
|
|
if (printResults) {
|
|
console.log(`Result:`)
|
|
console.log(`---------------------------------------------`)
|
|
console.log(JSON.stringify(r, null, 2))
|
|
console.log(`---------------------------------------------`)
|
|
}
|
|
if (r.created && r.processed && r.created.agreementId === agreementId) {
|
|
console.log('PASS')
|
|
} else {
|
|
throw new Error('FAIL')
|
|
}
|
|
}
|
|
const eventId = r.created.eventId;
|
|
|
|
console.log(`\nAction: Process (sign) by the receiver after data is sent`)
|
|
data = {
|
|
to: entity2,
|
|
eventId,
|
|
}
|
|
r = await jlincProcessEvent(data)
|
|
if (r) {
|
|
console.log(`Result:`)
|
|
if (printResults) {
|
|
console.log(`---------------------------------------------`)
|
|
console.log(JSON.stringify(r, null, 2))
|
|
console.log(`---------------------------------------------`)
|
|
}
|
|
if (r.auditData && r.auditData.audit.eventId === eventId) {
|
|
console.log('PASS')
|
|
} else {
|
|
throw new Error('FAIL')
|
|
}
|
|
}
|
|
|
|
console.log(`\nAction: Produce (create and sign) event for data to be sent with successful auth`)
|
|
data = {
|
|
from: entity1,
|
|
to: entity2,
|
|
auth: {
|
|
subject: {
|
|
type: "user",
|
|
id: "tester",
|
|
},
|
|
action: {
|
|
name: "read",
|
|
},
|
|
resource: {
|
|
type: "data",
|
|
id: "1234",
|
|
properties: {
|
|
ownerID: "tester@test.com",
|
|
}
|
|
}
|
|
},
|
|
payload: {
|
|
data: "testing",
|
|
},
|
|
}
|
|
r = await jlincProduceEvent(data)
|
|
if (r) {
|
|
if (printResults) {
|
|
console.log(`Result:`)
|
|
console.log(`---------------------------------------------`)
|
|
console.log(JSON.stringify(r, null, 2))
|
|
console.log(`---------------------------------------------`)
|
|
}
|
|
if (r.created && r.processed) {
|
|
console.log('PASS')
|
|
} else {
|
|
throw new Error('FAIL')
|
|
}
|
|
}
|
|
|
|
console.log(`\nAction: Produce (create and sign) event for data to be sent with failed auth`)
|
|
data = {
|
|
from: entity1,
|
|
to: entity2,
|
|
auth: {
|
|
subject: {
|
|
type: "user",
|
|
id: "tester",
|
|
},
|
|
action: {
|
|
name: "write",
|
|
},
|
|
resource: {
|
|
type: "data",
|
|
id: "1234",
|
|
properties: {
|
|
ownerID: "tester@test.com",
|
|
}
|
|
}
|
|
},
|
|
payload: {
|
|
data: "testing",
|
|
},
|
|
}
|
|
r = await jlincProduceEvent(data)
|
|
if (r) {
|
|
if (printResults) {
|
|
console.log(`Result:`)
|
|
console.log(`---------------------------------------------`)
|
|
console.log(JSON.stringify(r, null, 2))
|
|
console.log(`---------------------------------------------`)
|
|
}
|
|
if (r.decision != undefined && r.decision == false) {
|
|
console.log('PASS')
|
|
} else {
|
|
throw new Error('FAIL')
|
|
}
|
|
}
|
|
|
|
} catch (err) {
|
|
console.error("[*] ERROR:", err);
|
|
}
|
|
|
|
}
|
|
|
|
main() |