mirror of
https://github.com/selfxyz/self.git
synced 2026-04-05 03:00:53 -04:00
Clean Stores (#199)
This commit is contained in:
@@ -18,7 +18,7 @@
|
||||
"ios": "react-native run-ios",
|
||||
"lint": "eslint .",
|
||||
"lint:fix": "eslint --fix .",
|
||||
"nice": "yarn fmt:fix && yarn lint:fix",
|
||||
"nice": "yarn lint:fix && yarn fmt:fix",
|
||||
"reinstall": "yarn clean && yarn install && yarn install-app",
|
||||
"start": "watchman watch-del-all && react-native start",
|
||||
"test": "jest --passWithNoTests"
|
||||
|
||||
@@ -36,12 +36,11 @@ const LoadingScreen: React.FC<LoadingScreenProps> = ({}) => {
|
||||
}, 3000);
|
||||
};
|
||||
const [animationSource, setAnimationSource] = useState<any>(miscAnimation);
|
||||
const { registrationStatus, resetProof, setProofVerificationResult } =
|
||||
useProofInfo();
|
||||
const { registrationStatus, resetProof } = useProofInfo();
|
||||
const { getPassportDataAndSecret, clearPassportData } = usePassport();
|
||||
|
||||
useEffect(() => {
|
||||
setProofVerificationResult(null);
|
||||
// TODO this makes sense if reset proof was only about passport registration
|
||||
resetProof();
|
||||
}, []);
|
||||
|
||||
|
||||
@@ -22,8 +22,7 @@ import {
|
||||
} from '../../utils/haptic';
|
||||
|
||||
const SuccessScreen: React.FC = () => {
|
||||
const { selectedApp, proofVerificationResult, disclosureStatus } =
|
||||
useProofInfo();
|
||||
const { selectedApp, disclosureStatus } = useProofInfo();
|
||||
const appName = selectedApp?.appName;
|
||||
const goHome = useHapticNavigation('Home');
|
||||
|
||||
@@ -40,24 +39,6 @@ const SuccessScreen: React.FC = () => {
|
||||
}
|
||||
}, [disclosureStatus]);
|
||||
|
||||
useEffect(() => {
|
||||
if (!proofVerificationResult) {
|
||||
return;
|
||||
}
|
||||
const failedConditions = [];
|
||||
for (const field of fieldsToCheck) {
|
||||
console.log(
|
||||
`Checking field ${field}: ${JSON.stringify(
|
||||
(proofVerificationResult as any)[field],
|
||||
)}`,
|
||||
);
|
||||
if ((proofVerificationResult as any)[field] === false) {
|
||||
failedConditions.push(formatFieldName(field));
|
||||
}
|
||||
}
|
||||
console.log('Failed conditions:', JSON.stringify(failedConditions));
|
||||
}, [proofVerificationResult]);
|
||||
|
||||
return (
|
||||
<ExpandableBottomLayout.Layout backgroundColor={white}>
|
||||
<StatusBar barStyle="dark-content" backgroundColor={white} />
|
||||
@@ -152,37 +133,6 @@ function Info({
|
||||
}
|
||||
}
|
||||
|
||||
const formatFieldName = (field: string) => {
|
||||
return field
|
||||
.split('_')
|
||||
.map(word => word.charAt(0).toUpperCase() + word.slice(1))
|
||||
.join(' ');
|
||||
};
|
||||
|
||||
const fieldsToCheck = [
|
||||
'scope',
|
||||
'merkle_root_commitment',
|
||||
'merkle_root_csca',
|
||||
'attestation_id',
|
||||
'current_date',
|
||||
'issuing_state',
|
||||
'name',
|
||||
'passport_number',
|
||||
'nationality',
|
||||
'date_of_birth',
|
||||
'gender',
|
||||
'expiry_date',
|
||||
'older_than',
|
||||
'owner_of',
|
||||
'blinded_dsc_commitment',
|
||||
'proof',
|
||||
'dscProof',
|
||||
'dsc',
|
||||
'pubKey',
|
||||
'ofac',
|
||||
'forbidden_countries_list',
|
||||
];
|
||||
|
||||
export default SuccessScreen;
|
||||
|
||||
export const styles = StyleSheet.create({
|
||||
|
||||
@@ -40,7 +40,7 @@ import {
|
||||
const ProveScreen: React.FC = () => {
|
||||
const { navigate } = useNavigation();
|
||||
const { getPassportDataAndSecret } = usePassport();
|
||||
const { selectedApp, resetProof } = useProofInfo();
|
||||
const { selectedApp } = useProofInfo();
|
||||
const { handleProofVerified } = useApp();
|
||||
const selectedAppRef = useRef(selectedApp);
|
||||
|
||||
@@ -84,7 +84,6 @@ const ProveScreen: React.FC = () => {
|
||||
|
||||
const onVerify = useCallback(
|
||||
async function () {
|
||||
resetProof();
|
||||
buttonTap();
|
||||
if (isProcessingRef.current) {
|
||||
return;
|
||||
@@ -140,7 +139,7 @@ const ProveScreen: React.FC = () => {
|
||||
isProcessingRef.current = false;
|
||||
}
|
||||
},
|
||||
[navigate, getPassportDataAndSecret, handleProofVerified, resetProof],
|
||||
[navigate, getPassportDataAndSecret, handleProofVerified],
|
||||
);
|
||||
|
||||
async function sendMockPayload() {
|
||||
|
||||
@@ -73,6 +73,7 @@ const QRCodeViewFinderScreen: React.FC<QRCodeViewFinderScreenProps> = ({}) => {
|
||||
return;
|
||||
}
|
||||
|
||||
// TODO (_): cleaning here makes sense, clean app should set the disclosure states to default too
|
||||
// Clean up first
|
||||
cleanSelfApp();
|
||||
|
||||
|
||||
@@ -20,22 +20,30 @@ export enum ProofStatusEnum {
|
||||
interface IProofContext {
|
||||
registrationStatus: ProofStatusEnum;
|
||||
disclosureStatus: ProofStatusEnum;
|
||||
proofVerificationResult: unknown;
|
||||
selectedApp: SelfApp;
|
||||
setSelectedApp: (app: SelfApp) => void;
|
||||
cleanSelfApp: () => void;
|
||||
setProofVerificationResult: (result: unknown) => void;
|
||||
resetProof: () => void;
|
||||
}
|
||||
|
||||
const defaults: IProofContext = {
|
||||
registrationStatus: ProofStatusEnum.PENDING,
|
||||
disclosureStatus: ProofStatusEnum.PENDING,
|
||||
proofVerificationResult: null,
|
||||
selectedApp: {} as SelfApp,
|
||||
selectedApp: {
|
||||
appName: '',
|
||||
logoBase64: '',
|
||||
scope: '',
|
||||
endpointType: 'https',
|
||||
endpoint: '',
|
||||
header: '',
|
||||
sessionId: '',
|
||||
userId: '',
|
||||
userIdType: 'uuid',
|
||||
devMode: true,
|
||||
disclosures: {},
|
||||
},
|
||||
setSelectedApp: (_: SelfApp) => undefined,
|
||||
cleanSelfApp: () => undefined,
|
||||
setProofVerificationResult: (_: unknown) => undefined,
|
||||
resetProof: () => undefined,
|
||||
};
|
||||
|
||||
@@ -58,8 +66,7 @@ export function ProofProvider({ children }: PropsWithChildren<{}>) {
|
||||
const [disclosureStatus, setDisclosureStatus] = useState<ProofStatusEnum>(
|
||||
ProofStatusEnum.PENDING,
|
||||
);
|
||||
const [proofVerificationResult, setProofVerificationResult] =
|
||||
useState<unknown>(defaults.proofVerificationResult);
|
||||
|
||||
const [selectedApp, setSelectedAppInternal] = useState<SelfApp>(
|
||||
defaults.selectedApp,
|
||||
);
|
||||
@@ -69,31 +76,18 @@ export function ProofProvider({ children }: PropsWithChildren<{}>) {
|
||||
return;
|
||||
}
|
||||
setRegistrationStatus(ProofStatusEnum.PENDING);
|
||||
setProofVerificationResult(null);
|
||||
setSelectedAppInternal(app);
|
||||
}, []);
|
||||
|
||||
const cleanSelfApp = useCallback(() => {
|
||||
const emptySelfApp: SelfApp = {
|
||||
appName: '',
|
||||
logoBase64: '',
|
||||
scope: '',
|
||||
endpointType: 'https',
|
||||
endpoint: '',
|
||||
header: '',
|
||||
sessionId: '',
|
||||
userId: '',
|
||||
userIdType: 'uuid',
|
||||
devMode: true,
|
||||
disclosures: {},
|
||||
};
|
||||
setSelectedAppInternal(emptySelfApp);
|
||||
setSelectedAppInternal(defaults.selectedApp);
|
||||
}, []);
|
||||
|
||||
// why do we have both resetProof and cleanSelfApp?
|
||||
// possible we can make resetProof only about registration status, and clean app about disclosures status
|
||||
const resetProof = useCallback(() => {
|
||||
setRegistrationStatus(ProofStatusEnum.PENDING);
|
||||
setDisclosureStatus(ProofStatusEnum.PENDING);
|
||||
setProofVerificationResult(null);
|
||||
setSelectedAppInternal(defaults.selectedApp);
|
||||
}, []);
|
||||
|
||||
@@ -117,17 +111,14 @@ export function ProofProvider({ children }: PropsWithChildren<{}>) {
|
||||
() => ({
|
||||
registrationStatus,
|
||||
disclosureStatus,
|
||||
proofVerificationResult,
|
||||
selectedApp,
|
||||
setSelectedApp,
|
||||
cleanSelfApp,
|
||||
setProofVerificationResult,
|
||||
resetProof,
|
||||
}),
|
||||
[
|
||||
registrationStatus,
|
||||
disclosureStatus,
|
||||
proofVerificationResult,
|
||||
selectedApp,
|
||||
setSelectedApp,
|
||||
cleanSelfApp,
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
import { resetGenericPassword } from 'react-native-keychain';
|
||||
|
||||
import { DEFAULT_DOB, DEFAULT_DOE, DEFAULT_PNUMBER } from '@env';
|
||||
import { create } from 'zustand';
|
||||
|
||||
@@ -7,7 +5,6 @@ interface UserState {
|
||||
passportNumber: string;
|
||||
dateOfBirth: string;
|
||||
dateOfExpiry: string;
|
||||
clearSecretFromStorage: () => void;
|
||||
update: (patch: any) => void;
|
||||
deleteMrzFields: () => void;
|
||||
}
|
||||
@@ -17,10 +14,6 @@ const useUserStore = create<UserState>((set, get) => ({
|
||||
dateOfBirth: DEFAULT_DOB ?? '',
|
||||
dateOfExpiry: DEFAULT_DOE ?? '',
|
||||
|
||||
clearSecretFromStorage: async () => {
|
||||
await resetGenericPassword({ service: 'secret' });
|
||||
},
|
||||
|
||||
update: patch => {
|
||||
set({
|
||||
...get(),
|
||||
|
||||
Reference in New Issue
Block a user