|
|
@ -115,6 +115,24 @@ |
|
|
|
</ul> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
<div class="mt-4"> |
|
|
|
<div v-if="confirmerIdList.includes(activeDid)"> |
|
|
|
You have confirmed this claim. |
|
|
|
</div> |
|
|
|
<div v-else-if="containsHiddenDid(veriClaim.claim)"> |
|
|
|
You cannot confirm this claim because it contains a DID that is hidden |
|
|
|
from you. |
|
|
|
</div> |
|
|
|
<div v-else> |
|
|
|
<button |
|
|
|
class="bg-blue-600 text-white mt-4 px-4 py-2 rounded-md mb-4" |
|
|
|
@click="confirmClaim(veriClaim.id)" |
|
|
|
> |
|
|
|
Confirm Claim |
|
|
|
</button> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
<div> |
|
|
@ -164,12 +182,7 @@ import { accountsDB, db } from "@/db/index"; |
|
|
|
import { Contact } from "@/db/tables/contacts"; |
|
|
|
import { MASTER_SETTINGS_KEY, Settings } from "@/db/tables/settings"; |
|
|
|
import { accessToken } from "@/libs/crypto"; |
|
|
|
import { |
|
|
|
BLANK_GENERIC_CLAIM, |
|
|
|
didInfo, |
|
|
|
isHiddenDid, |
|
|
|
stripEndorserPrefix, |
|
|
|
} from "@/libs/endorserServer"; |
|
|
|
import * as serverUtil from "@/libs/endorserServer"; |
|
|
|
import QuickNav from "@/components/QuickNav.vue"; |
|
|
|
import EntityIcon from "@/components/EntityIcon.vue"; |
|
|
|
import { Account } from "@/db/tables/accounts"; |
|
|
@ -197,9 +210,10 @@ export default class ClaimView extends Vue { |
|
|
|
fullClaim = null; |
|
|
|
fullClaimMessage = ""; |
|
|
|
numConfsNotVisible = 0; // number of hidden DIDs in the confirmerIdList, minus the issuer if they aren't visible |
|
|
|
veriClaim = BLANK_GENERIC_CLAIM; |
|
|
|
veriClaim = serverUtil.BLANK_GENERIC_SERVER_RECORD; |
|
|
|
|
|
|
|
util = util; |
|
|
|
containsHiddenDid = serverUtil.containsHiddenDid; |
|
|
|
|
|
|
|
async created() { |
|
|
|
await db.open(); |
|
|
@ -241,7 +255,7 @@ export default class ClaimView extends Vue { |
|
|
|
); |
|
|
|
} |
|
|
|
|
|
|
|
public async getIdentity(activeDid: string) { |
|
|
|
public async getIdentity(activeDid: string): Promise<IIdentifier> { |
|
|
|
await accountsDB.open(); |
|
|
|
const account = (await accountsDB.accounts |
|
|
|
.where("did") |
|
|
@ -275,7 +289,7 @@ export default class ClaimView extends Vue { |
|
|
|
dids: Array<string>, |
|
|
|
contacts: Array<Contact>, |
|
|
|
) { |
|
|
|
return didInfo(did, activeDid, dids, contacts); |
|
|
|
return serverUtil.didInfo(did, activeDid, dids, contacts); |
|
|
|
} |
|
|
|
|
|
|
|
async loadClaim(claimId: string, identity: IIdentifier) { |
|
|
@ -317,21 +331,19 @@ export default class ClaimView extends Vue { |
|
|
|
const confirmUrl = |
|
|
|
this.apiServer + |
|
|
|
"/api/report/issuersWhoClaimedOrConfirmed?claimId=" + |
|
|
|
encodeURIComponent(stripEndorserPrefix(claimId)); |
|
|
|
encodeURIComponent(serverUtil.stripEndorserPrefix(claimId)); |
|
|
|
const confirmHeaders = await this.getHeaders(identity); |
|
|
|
try { |
|
|
|
const response = await this.axios.get(confirmUrl, { |
|
|
|
headers: confirmHeaders, |
|
|
|
}); |
|
|
|
if (response.status === 200) { |
|
|
|
console.log("response:", response); |
|
|
|
const resultList1 = response.data.result || []; |
|
|
|
const resultList2 = R.reject(isHiddenDid, resultList1); |
|
|
|
const resultList2 = R.reject(serverUtil.isHiddenDid, resultList1); |
|
|
|
const resultList3 = R.reject( |
|
|
|
(did: string) => did === this.veriClaim.issuer, |
|
|
|
resultList2, |
|
|
|
); |
|
|
|
console.log("all result lists:", resultList1, resultList2, resultList3); |
|
|
|
this.confirmerIdList = resultList3; |
|
|
|
this.numConfsNotVisible = resultList1.length - resultList2.length; |
|
|
|
if (resultList3.length === resultList2.length) { |
|
|
@ -351,8 +363,6 @@ export default class ClaimView extends Vue { |
|
|
|
this.confsVisibleErrorMessage = |
|
|
|
"Had problems retrieving confirmations. See logs for more info."; |
|
|
|
} |
|
|
|
console.log("confirmerIdList:", this.confirmerIdList); |
|
|
|
console.log("confsVisibleToIdList:", this.confsVisibleToIdList); |
|
|
|
} |
|
|
|
|
|
|
|
async showFullClaim(claimId: string) { |
|
|
@ -407,5 +417,54 @@ export default class ClaimView extends Vue { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
async confirmClaim() { |
|
|
|
// similar logic is found in endorser-mobile |
|
|
|
const goodClaim = serverUtil.removeSchemaContext( |
|
|
|
serverUtil.removeVisibleToDids( |
|
|
|
serverUtil.addLastClaimOrHandleAsIdIfMissing( |
|
|
|
this.veriClaim.claim, |
|
|
|
this.veriClaim.id, |
|
|
|
this.veriClaim.handleId, |
|
|
|
), |
|
|
|
), |
|
|
|
); |
|
|
|
const confirmationClaim: serverUtil.GenericVerifiableCredential & { |
|
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any |
|
|
|
object: any; |
|
|
|
} = { |
|
|
|
"@context": "https://schema.org", |
|
|
|
"@type": "AgreeAction", |
|
|
|
object: goodClaim, |
|
|
|
}; |
|
|
|
const result = await serverUtil.createAndSubmitClaim( |
|
|
|
confirmationClaim, |
|
|
|
await this.getIdentity(this.activeDid), |
|
|
|
this.apiServer, |
|
|
|
this.axios, |
|
|
|
); |
|
|
|
if (result.type === "success") { |
|
|
|
this.$notify( |
|
|
|
{ |
|
|
|
group: "alert", |
|
|
|
type: "success", |
|
|
|
title: "Success", |
|
|
|
text: "Confirmation submitted.", |
|
|
|
}, |
|
|
|
5000, |
|
|
|
); |
|
|
|
} else { |
|
|
|
console.log("Got error submitting the confirmation:", result); |
|
|
|
this.$notify( |
|
|
|
{ |
|
|
|
group: "alert", |
|
|
|
type: "danger", |
|
|
|
title: "Error", |
|
|
|
text: "There was a problem submitting the confirmation. See logs for more info.", |
|
|
|
}, |
|
|
|
-1, |
|
|
|
); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
</script> |
|
|
|