Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

UI changes #142

Merged
merged 7 commits into from
Mar 6, 2025
Merged
Show file tree
Hide file tree
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
2 changes: 2 additions & 0 deletions src/entries/Background/rpc.ts
Original file line number Diff line number Diff line change
Expand Up @@ -204,6 +204,8 @@ export type RequestHistory = {
verification?: {
sent: string;
recv: string;
verifierKey: string;
notaryKey?: string;
};
secretHeaders?: string[];
secretResps?: string[];
Expand Down
29 changes: 25 additions & 4 deletions src/entries/Offscreen/rpc.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import {
Transcript,
Verifier as TVerifier,
} from 'tlsn-js';
import { devlog, urlify } from '../../utils/misc';
import { convertNotaryWsToHttp, devlog, urlify } from '../../utils/misc';
import * as Comlink from 'comlink';
import { PresentationJSON as PresentationJSONa7 } from 'tlsn-js/build/types';
import { subtractRanges } from './utils';
Expand Down Expand Up @@ -176,7 +176,12 @@ export const onVerifyProof = async (request: any, sendResponse: any) => {

export const onVerifyProofRequest = async (request: any) => {
const proof: PresentationJSON = request.data.proof;
const result: { sent: string; recv: string } = await verifyProof(proof);
const result: {
sent: string;
recv: string;
verifierKey?: string;
notaryKey?: string;
} = await verifyProof(proof);

chrome.runtime.sendMessage<any, string>({
type: BackgroundActiontype.finish_prove_request,
Expand All @@ -185,6 +190,8 @@ export const onVerifyProofRequest = async (request: any) => {
verification: {
sent: result.sent,
recv: result.recv,
verifierKey: result.verifierKey,
notaryKey: result.notaryKey,
},
},
});
Expand Down Expand Up @@ -480,7 +487,12 @@ async function createProver(options: {
async function verifyProof(
proof: PresentationJSON,
): Promise<{ sent: string; recv: string }> {
let result: { sent: string; recv: string };
let result: {
sent: string;
recv: string;
verifierKey?: string;
notaryKey?: string;
};

switch (proof.version) {
case undefined: {
Expand All @@ -494,14 +506,23 @@ async function verifyProof(
sent: verifierOutput.transcript.sent,
recv: verifierOutput.transcript.recv,
});
const vk = await presentation.verifyingKey();
const verifyingKey = Buffer.from(vk.data).toString('hex');
const notaryUrl = proof.meta.notaryUrl
? convertNotaryWsToHttp(proof.meta.notaryUrl)
: '';
const publicKey = await new NotaryServer(notaryUrl)
.publicKey()
.catch(() => '');
result = {
sent: transcript.sent(),
recv: transcript.recv(),
verifierKey: verifyingKey,
notaryKey: publicKey,
};
break;
}
}

return result;
}

Expand Down
11 changes: 8 additions & 3 deletions src/entries/Popup/Popup.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import History from '../../pages/History';
import ProofUploader from '../../pages/ProofUploader';
import browser from 'webextension-polyfill';
import store from '../../utils/store';
import { isPopupWindow } from '../../utils/misc';
import PluginUploadInfo from '../../components/PluginInfo';
import ConnectionDetailsModal from '../../components/ConnectionDetailsModal';
import { ConnectionApproval } from '../../pages/ConnectionApproval';
Expand All @@ -41,7 +42,7 @@ import { fetchP2PState } from '../../reducers/p2p';
const Popup = () => {
const dispatch = useDispatch();
const navigate = useNavigate();

const [isPopup, setIsPopup] = useState(isPopupWindow());
useEffect(() => {
fetchP2PState();
}, []);
Expand Down Expand Up @@ -101,8 +102,12 @@ const Popup = () => {
onClick={() => navigate('/')}
/>
<div className="flex flex-row flex-grow items-center justify-end gap-4">
<AppConnectionLogo />
<MenuIcon />
{!isPopup && (
<>
<AppConnectionLogo />
<MenuIcon />
</>
)}
</div>
</div>
<Routes>
Expand Down
55 changes: 53 additions & 2 deletions src/pages/History/request-menu.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ export default function RequestMenu({
const request = useRequestHistory(requestId);
const [showingShareConfirmation, setShowingShareConfirmation] =
useState(false);
const [showRemoveModal, setShowRemoveModal] = useState(false);

const onRetry = useCallback(async () => {
const notaryUrl = await getNotaryApi();
Expand Down Expand Up @@ -64,6 +65,12 @@ export default function RequestMenu({
showMenu={showMenu}
/>
)}
<RemoveHistory
onRemove={onDelete}
showRemovalModal={showRemoveModal}
setShowRemoveModal={setShowRemoveModal}
onCancel={() => setShowRemoveModal(false)}
/>
<div
className="fixed top-0 left-0 w-screen h-screen z-10 cursor-default"
onClick={(e) => {
Expand Down Expand Up @@ -116,8 +123,7 @@ export default function RequestMenu({
className="border-b border-slate-300 !text-red-500"
onClick={(e) => {
e.stopPropagation();
onDelete();
showMenu(false);
setShowRemoveModal(true);
}}
>
Delete
Expand Down Expand Up @@ -254,3 +260,48 @@ function ShareConfirmationModal({
</Modal>
);
}

export function RemoveHistory(props: {
onRemove: () => void;
showRemovalModal: boolean;
setShowRemoveModal: (show: boolean) => void;
onCancel: () => void;
}): ReactElement {
const { onRemove, setShowRemoveModal, showRemovalModal } = props;

const onCancel = useCallback(() => {
setShowRemoveModal(false);
}, [showRemovalModal]);
return !showRemovalModal ? (
<></>
) : (
<Modal
onClose={onCancel}
className="flex flex-col items-center text-base cursor-default justify-center !w-auto mx-4 my-[50%] p-4 gap-4"
>
<ModalContent className="flex flex-col w-full gap-4 items-center text-base justify-center">
<div className="text-base">
Are you sure you want to delete this attestation?
</div>
<div className="mb-1">
<span className="text-red-500 font-bold">Warning:</span> this cannot
be undone.
</div>
<div className="flex flex-row gap-2 justify-end">
<button
className="m-0 w-24 bg-slate-100 text-slate-300 hover:bg-slate-200 hover:text-slate-500"
onClick={onCancel}
>
Cancel
</button>
<button
className="m-0 w-24 bg-red-100 text-red-300 hover:bg-red-200 hover:text-red-500"
onClick={onRemove}
>
Delete
</button>
</div>
</ModalContent>
</Modal>
);
}
28 changes: 25 additions & 3 deletions src/pages/ProofUploader/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,17 @@ import React, {
import Icon from '../../components/Icon';
import { BackgroundActiontype } from '../../entries/Background/rpc';
import ProofViewer from '../ProofViewer';
import { convertNotaryWsToHttp } from '../../utils/misc';

export default function ProofUploader(): ReactElement {
const [proof, setProof] = useState<{
recv: string;
sent: string;
verifierKey?: string;
notaryKey?: string;
} | null>(null);
const [uploading, setUploading] = useState(false);

const [metadata, setMetaData] = useState<any>({ meta: '', version: '' });
const onFileUpload: ChangeEventHandler<HTMLInputElement> = useCallback(
async (e) => {
// @ts-ignore
Expand All @@ -26,8 +29,19 @@ export default function ProofUploader(): ReactElement {
const result = event.target?.result;
if (result) {
const proof = JSON.parse(result as string);
const notaryUrl = convertNotaryWsToHttp(proof.meta.notaryUrl);
proof.meta.notaryUrl = notaryUrl;
setMetaData({ meta: proof.meta, version: proof.version });
const res = await chrome.runtime
.sendMessage<any, { recv: string; sent: string }>({
.sendMessage<
any,
{
recv: string;
sent: string;
verifierKey?: string;
notaryKey?: string;
}
>({
type: BackgroundActiontype.verify_proof,
data: proof,
})
Expand All @@ -48,7 +62,15 @@ export default function ProofUploader(): ReactElement {
);

if (proof) {
return <ProofViewer recv={proof.recv} sent={proof.sent} />;
return (
<ProofViewer
recv={proof.recv}
sent={proof.sent}
verifierKey={proof.verifierKey}
notaryKey={proof.notaryKey}
info={metadata}
/>
);
}

return (
Expand Down
Loading
Loading