Skip to content
This repository was archived by the owner on Feb 10, 2025. It is now read-only.

fix: add back credential verification #66

Merged
merged 2 commits into from
Nov 29, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -4,6 +4,7 @@ import { IconLabel } from "@/components/IconLabel";
// import { useCredentialverification } from "@/features/checker/hooks";
import { ProjectApplicationForManager, ProjectMetadata } from "@/features/checker/services/allo";
import { IconType } from "@/primitives/Icon";
import { useCredentialVerification } from "@/hooks/useCredentialVerification";

export interface ProjectSummaryProps {
projectMetadata: ProjectMetadata;
@@ -20,7 +21,7 @@ export const ProjectSummary: React.FC<ProjectSummaryProps> = ({ projectMetadata,
lastUpdated.toString() !== "0" ? lastUpdated : createdAt,
).toLocaleString()}`;

// const { isTwitterVerified, isGithubVerified } = useCredentialverification(application);
const { isTwitterVerified, isGithubVerified } = useCredentialVerification(application);

return (
<div className="flex gap-16">
@@ -32,7 +33,7 @@ export const ProjectSummary: React.FC<ProjectSummaryProps> = ({ projectMetadata,
type="social"
platform="twitter"
link={`https://x.com/${projectTwitter}`}
isVerified={false}
isVerified={isTwitterVerified}
/>
)}
</div>
@@ -58,7 +59,7 @@ export const ProjectSummary: React.FC<ProjectSummaryProps> = ({ projectMetadata,
type="social"
platform="github"
link={`https://github.com/${projectGithub}`}
isVerified={false}
isVerified={isGithubVerified}
/>
)}
</div>
32 changes: 32 additions & 0 deletions src/features/checker/services/checker/api.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { EvaluationBody } from "../../types";
import { ProjectApplicationForManager } from "../allo";
import { CHECKER_ENDPOINT } from "./checkerClient";

export interface SyncPoolBody {
@@ -59,3 +60,34 @@ export async function syncPool(syncPoolBody: SyncPoolBody): Promise<boolean> {
throw error;
}
}

export async function verifyCredentials(
application: Partial<ProjectApplicationForManager>,
): Promise<{ twitter: boolean; github: boolean }> {
const url = `${CHECKER_ENDPOINT}/api/passport/validate`;

try {
const response = await fetch(url, {
method: "POST",
headers: {
accept: "*/*",
"Content-Type": "application/json",
},
body: JSON.stringify({ application: application }),
});

if (!response.ok) {
const errorData = await response.json();
throw new Error(`Error: ${response.status} - ${errorData.message || "Unknown error"}`);
}

const data = await response.json();
return {
twitter: data.provider.twitter?.isVerified || false,
github: data.provider.github?.isVerified || false,
};
} catch (error) {
console.error("Error verifying credentials:", error);
throw error;
}
}
28 changes: 28 additions & 0 deletions src/hooks/useCredentialVerification.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import { useState, useEffect } from "react";

import { ProjectApplicationForManager, verifyCredentials } from "@/features/checker";

export function useCredentialVerification(
application: Partial<ProjectApplicationForManager> | undefined,
) {
const [isTwitterVerified, setIsTwitterVerified] = useState<boolean>(false);
const [isGithubVerified, setIsGithubVerified] = useState<boolean>(false);

useEffect(() => {
async function checkVerification() {
if (application) {
try {
const { twitter, github } = await verifyCredentials(application);
setIsTwitterVerified(twitter);
setIsGithubVerified(github);
} catch (error) {
console.error("Failed to verify credentials:", error);
}
}
}

checkVerification();
}, [application]);

return { isTwitterVerified, isGithubVerified };
}