Browse Source

Fix: entity-type identifier validation

- Ensure claims contain only correct and necessary giver and recipient identifiers, as per Endorser.ch documentation
pull/140/head
Jose Olarte III 4 days ago
parent
commit
ca22161f12
  1. 74
      src/components/GiftedDialog.vue

74
src/components/GiftedDialog.vue

@ -417,21 +417,7 @@
<router-link
:to="{
name: 'gifted-details',
query: {
amountInput,
description,
giverDid: showProjects ? undefined : giver?.did,
giverName: giver?.name,
offerId,
fulfillsProjectId:
showProjects && isFromProjectView
? giver?.handleId
: toProjectId,
providerProjectId: showProjects ? giver?.handleId : fromProjectId,
recipientDid: receiver?.did,
recipientName: receiver?.name,
unitCode,
},
query: giftedDetailsQuery,
}"
class="block w-full text-center text-md uppercase bg-gradient-to-b from-slate-400 to-slate-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-1.5 py-2 rounded-lg mb-4"
>
@ -824,24 +810,46 @@ export default class GiftedDialog extends Vue {
unitCode: string = "HUR",
) {
try {
// Determine the correct parameters based on entity types
let fromDid: string | undefined;
let toDid: string | undefined;
let fulfillsProjectHandleId: string | undefined;
let providerPlanHandleId: string | undefined;
if (this.giverEntityType === "project" && this.recipientEntityType === "person") {
// Project-to-person gift
fromDid = undefined; // No person giver
toDid = recipientDid as string; // Person recipient
fulfillsProjectHandleId = undefined; // No project recipient
providerPlanHandleId = this.giver?.handleId; // Project giver
} else if (this.giverEntityType === "person" && this.recipientEntityType === "project") {
// Person-to-project gift
fromDid = giverDid as string; // Person giver
toDid = undefined; // No person recipient
fulfillsProjectHandleId = this.toProjectId; // Project recipient
providerPlanHandleId = undefined; // No project giver
} else {
// Person-to-person gift
fromDid = giverDid as string;
toDid = recipientDid as string;
fulfillsProjectHandleId = undefined;
providerPlanHandleId = undefined;
}
const result = await createAndSubmitGive(
this.axios,
this.apiServer,
this.activeDid,
this.showProjects ? undefined : (giverDid as string),
this.showProjects && this.isFromProjectView
? this.giver?.handleId
: (recipientDid as string),
fromDid,
toDid,
description,
amount,
unitCode,
this.showProjects && this.isFromProjectView
? this.giver?.handleId
: this.toProjectId,
fulfillsProjectHandleId,
this.offerId,
false,
undefined,
this.showProjects ? this.giver?.handleId : undefined,
providerPlanHandleId,
);
if (!result.success) {
@ -1003,6 +1011,26 @@ export default class GiftedDialog extends Vue {
};
this.currentStep = 2;
}
// Computed property for the query parameters
get giftedDetailsQuery() {
return {
amountInput: this.amountInput,
description: this.description,
giverDid: this.giverEntityType === "person" ? this.giver?.did : undefined,
giverName: this.giver?.name,
offerId: this.offerId,
fulfillsProjectId: this.giverEntityType === "person" && this.recipientEntityType === "project"
? this.toProjectId
: undefined,
providerProjectId: this.giverEntityType === "project" && this.recipientEntityType === "person"
? this.giver?.handleId
: this.fromProjectId,
recipientDid: this.receiver?.did,
recipientName: this.receiver?.name,
unitCode: this.unitCode,
};
}
}
</script>

Loading…
Cancel
Save