|
|
@ -74,8 +74,9 @@ |
|
|
|
import { Options, Vue } from "vue-class-component"; |
|
|
|
import { AppString } from "@/constants/app"; |
|
|
|
import { db } from "../db"; |
|
|
|
import { accessToken, sign } from "@/libs/crypto"; |
|
|
|
import { accessToken, SimpleSigner } from "@/libs/crypto"; |
|
|
|
import * as didJwt from "did-jwt"; |
|
|
|
import { IIdentifier } from "@veramo/core"; |
|
|
|
|
|
|
|
@Options({ |
|
|
|
components: {}, |
|
|
@ -84,40 +85,39 @@ export default class NewEditProjectView extends Vue { |
|
|
|
projectName = ""; |
|
|
|
description = ""; |
|
|
|
|
|
|
|
public async onSaveProjectClick() { |
|
|
|
await db.open(); |
|
|
|
const num_accounts = await db.accounts.count(); |
|
|
|
if (num_accounts === 0) { |
|
|
|
console.log("Problem! Should have a profile!"); |
|
|
|
} else { |
|
|
|
const accounts = await db.accounts.toArray(); |
|
|
|
const identity = JSON.parse(accounts[0].identity); |
|
|
|
const address = identity.did; |
|
|
|
// Make a claim |
|
|
|
const vcClaim = { |
|
|
|
"@context": "https://schema.org", |
|
|
|
"@type": "PlanAction", |
|
|
|
identifier: address, |
|
|
|
name: this.projectName, |
|
|
|
description: this.description, |
|
|
|
}; |
|
|
|
// Make a payload for the claim |
|
|
|
const vcPayload = { |
|
|
|
sub: "PlanAction", |
|
|
|
vc: { |
|
|
|
"@context": ["https://www.w3.org/2018/credentials/v1"], |
|
|
|
type: ["VerifiableCredential"], |
|
|
|
credentialSubject: vcClaim, |
|
|
|
}, |
|
|
|
}; |
|
|
|
// create a signature using private key of identity |
|
|
|
const signer = await sign(identity.keys[0].privateKeyHex); |
|
|
|
private async SaveProject(identity: IIdentifier) { |
|
|
|
const address = identity.did; |
|
|
|
// Make a claim |
|
|
|
const vcClaim = { |
|
|
|
"@context": "https://schema.org", |
|
|
|
"@type": "PlanAction", |
|
|
|
identifier: address, |
|
|
|
name: this.projectName, |
|
|
|
description: this.description, |
|
|
|
}; |
|
|
|
// Make a payload for the claim |
|
|
|
const vcPayload = { |
|
|
|
sub: "PlanAction", |
|
|
|
vc: { |
|
|
|
"@context": ["https://www.w3.org/2018/credentials/v1"], |
|
|
|
type: ["VerifiableCredential"], |
|
|
|
credentialSubject: vcClaim, |
|
|
|
}, |
|
|
|
}; |
|
|
|
// create a signature using private key of identity |
|
|
|
if ( |
|
|
|
identity.keys[0].privateKeyHex !== "undefined" && |
|
|
|
identity.keys[0].privateKeyHex !== null |
|
|
|
) { |
|
|
|
// eslint-disable-next-line |
|
|
|
const privateKeyHex: string = identity.keys[0].privateKeyHex!; |
|
|
|
const signer = await SimpleSigner(privateKeyHex); |
|
|
|
const alg = undefined; |
|
|
|
// create a JWT for the request |
|
|
|
const vcJwt: string = await didJwt.createJWT(vcPayload, { |
|
|
|
alg, |
|
|
|
issuer: identity, |
|
|
|
signer, |
|
|
|
alg: alg, |
|
|
|
issuer: identity.did, |
|
|
|
signer: signer, |
|
|
|
}); |
|
|
|
|
|
|
|
// Make the xhr request payload |
|
|
@ -140,6 +140,18 @@ export default class NewEditProjectView extends Vue { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public async onSaveProjectClick() { |
|
|
|
await db.open(); |
|
|
|
const num_accounts = await db.accounts.count(); |
|
|
|
if (num_accounts === 0) { |
|
|
|
console.log("Problem! Should have a profile!"); |
|
|
|
} else { |
|
|
|
const accounts = await db.accounts.toArray(); |
|
|
|
const identity = JSON.parse(accounts[0].identity); |
|
|
|
this.SaveProject(identity); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public onCancelClick() { |
|
|
|
this.$router.back(); |
|
|
|
} |
|
|
|