Skip to content

Commit

Permalink
improve error handling
Browse files Browse the repository at this point in the history
  • Loading branch information
shayzluf committed Jan 30, 2025
1 parent ad9e128 commit f524438
Show file tree
Hide file tree
Showing 2 changed files with 74 additions and 51 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ export async function optInToAuditCompetition(editSessionIdOrAddress: string): P
});
return response.data.ok;
} catch (error) {
console.log(error);
console.error("Error opting in to audit competition:", error);
// Don't throw, just return false to indicate failure
return false;
}
}
Expand All @@ -26,7 +27,8 @@ export async function optOutToAuditCompetition(editSessionIdOrAddress: string):
});
return response.data.ok;
} catch (error) {
console.log(error);
console.error("Error opting out from audit competition:", error);
// Don't throw, just return false to indicate failure
return false;
}
}
Expand All @@ -41,7 +43,8 @@ export async function getAllOptedInOnAuditCompetition(editSessionIdOrAddress?: s
const response = await axiosClient.get(`${BASE_SERVICE_URL}/edit-session/${editSessionIdOrAddress}/list-opted-in-users`);
return response.data.optedInUsers;
} catch (error) {
console.log(error);
console.error("Error getting opted in users:", error);
// Don't throw, just return empty array to indicate no users
return [];
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -198,12 +198,12 @@ export const SubmissionFormPage = () => {
async (data: ISubmissionData) => {
if (!vault || !data || !data.submissionResult) return;

setSubmissionData({
...data,
submissionResult: { ...data.submissionResult, botStatus: SubmissionOpStatus.Pending, auditCompetitionRepo: undefined },
});

try {
setSubmissionData({
...data,
submissionResult: { ...data.submissionResult, botStatus: SubmissionOpStatus.Pending, auditCompetitionRepo: undefined },
});

const res = await submitVulnerabilitySubmission(data, vault, hackerProfile);

if (res.success) {
Expand All @@ -215,71 +215,91 @@ export const SubmissionFormPage = () => {
auditCompetitionRepo: res.auditCompetitionRepo,
},
});
} else throw new Error("Failed to submit vulnerability");
} catch {
} else {
throw new Error("Failed to submit vulnerability");
}
} catch (error) {
console.error("Error sending submission to server:", error);
setSubmissionData({
...data,
submissionResult: { ...data.submissionResult, botStatus: SubmissionOpStatus.Fail, auditCompetitionRepo: undefined },
});
confirm({
title: t("serverSubmissionError"),
titleIcon: <ErrorIcon className="mr-2" fontSize="large" />,
description: t("serverSubmissionErrorExplanation"),
confirmText: t("gotIt"),
});
}
},
[vault, hackerProfile]
[vault, hackerProfile, confirm, t]
);

const submitSubmission = useCallback(async () => {
if (!vault) return;
if (!submissionData?.submissionsDescriptions?.submission) return;

// Check if vault requires message signature to submit
if (requireMessageSignature && !userHasCollectedSignature) {
const wantsToBeRedirected = await confirm({
title: t("youNeedToSignMessageToSubmit"),
titleIcon: <ErrorIcon className="mr-2" fontSize="large" />,
description: t("youNeedToSignMessageToSubmitExplanation"),
cancelText: t("close"),
confirmText: t("gotIt"),
});
try {
// Check if vault requires message signature to submit
if (requireMessageSignature && !userHasCollectedSignature) {
const wantsToBeRedirected = await confirm({
title: t("youNeedToSignMessageToSubmit"),
titleIcon: <ErrorIcon className="mr-2" fontSize="large" />,
description: t("youNeedToSignMessageToSubmitExplanation"),
cancelText: t("close"),
confirmText: t("gotIt"),
});

if (!wantsToBeRedirected) return;
if (!wantsToBeRedirected) return;

const isAudit = vault?.description?.["project-metadata"].type === "audit";
const name = vault?.description?.["project-metadata"].name ?? "";
const isAudit = vault?.description?.["project-metadata"].type === "audit";
const name = vault?.description?.["project-metadata"].name ?? "";

const mainRoute = `/${isAudit ? HoneypotsRoutePaths.audits : HoneypotsRoutePaths.bugBounties}`;
const vaultSlug = slugify(name);
const mainRoute = `/${isAudit ? HoneypotsRoutePaths.audits : HoneypotsRoutePaths.bugBounties}`;
const vaultSlug = slugify(name);

return navigate(`${mainRoute}/${vaultSlug}-${vault.id}`);
}
return navigate(`${mainRoute}/${vaultSlug}-${vault.id}`);
}

const submission = submissionData?.submissionsDescriptions?.submission;
const calculatedCid = await calcCid(submission);
const submission = submissionData?.submissionsDescriptions?.submission;
const calculatedCid = await calcCid(submission);

if (submissionData.ref === "audit-wizard") {
if (!submissionData.auditWizardData) return;
// Verify if the submission was not changed and validate the signature
const auditwizardSubmission = getCurrentAuditwizardSubmission(submissionData.auditWizardData, submissionData);
if (submissionData.ref === "audit-wizard") {
if (!submissionData.auditWizardData) return;
// Verify if the submission was not changed and validate the signature
const auditwizardSubmission = getCurrentAuditwizardSubmission(submissionData.auditWizardData, submissionData);

if (JSON.stringify(submissionData.auditWizardData) !== JSON.stringify(auditwizardSubmission)) {
return confirm({
title: t("submissionChanged"),
titleIcon: <ErrorIcon className="mr-2" fontSize="large" />,
description: t("submissionChangedExplanationAuditWizard"),
confirmText: t("gotIt"),
});
}
if (JSON.stringify(submissionData.auditWizardData) !== JSON.stringify(auditwizardSubmission)) {
return confirm({
title: t("submissionChanged"),
titleIcon: <ErrorIcon className="mr-2" fontSize="large" />,
description: t("submissionChangedExplanationAuditWizard"),
confirmText: t("gotIt"),
});
}

const res = await verifyAuditWizardSignature(auditwizardSubmission);
if (!res) {
return confirm({
title: t("submissionNotValid"),
titleIcon: <ErrorIcon className="mr-2" fontSize="large" />,
description: t("submissionNotValidExplanationAuditWizard"),
confirmText: t("gotIt"),
});
const res = await verifyAuditWizardSignature(auditwizardSubmission);
if (!res) {
return confirm({
title: t("submissionNotValid"),
titleIcon: <ErrorIcon className="mr-2" fontSize="large" />,
description: t("submissionNotValidExplanationAuditWizard"),
confirmText: t("gotIt"),
});
}
}
}

sendVulnerabilityOnChain(calculatedCid);
await sendVulnerabilityOnChain(calculatedCid);
} catch (error) {
console.error("Error in submission:", error);
reset();
confirm({
title: t("submissionError"),
titleIcon: <ErrorIcon className="mr-2" fontSize="large" />,
description: t("submissionErrorExplanation"),
confirmText: t("gotIt"),
});
}
}, [sendVulnerabilityOnChain, submissionData, confirm, requireMessageSignature, userHasCollectedSignature, navigate, vault, t]);

const handleClearSubmission = async () => {
Expand Down

0 comments on commit f524438

Please sign in to comment.