Files
safetynet/tests/fixtures/broker-certificate-pins-electron.cjs
T

24 lines
1.5 KiB
JavaScript

'use strict';
const {app,session}=require('electron');
const {createBrokerCertificatePins}=require('../../apps/browser/broker-certificate-pins.cjs');
app.disableHardwareAcceleration();
let initialized=false;
process.once('disconnect',()=>app.exit(0));
process.on('message',async input=>{
if(input?.type==='stop'){app.exit(0);return;}
if(initialized||input?.type!=='start')return;initialized=true;
try{
app.setPath('userData',input.profile);await app.whenReady();
const partition=session.fromPartition('certificate-pin-native',{cache:false});
const pins=createBrokerCertificatePins({generation:'synthetic-generation',policyVersion:4,current:()=>true,authorizedAuthority:authority=>authority===input.leaf.authority});
pins.accept({...input.leaf,generation:'synthetic-generation',policyVersion:4});
partition.setCertificateVerifyProc((request,callback)=>pins.verify(request,callback));
await partition.setProxy({mode:'direct'});
const allowed=await partition.fetch(input.publicURL,{signal:AbortSignal.timeout(10000)});
const publicBody=await allowed.text();let denied=false;
try{await partition.fetch(input.untrustedURL,{signal:AbortSignal.timeout(10000)});}catch{denied=true;}
await partition.closeAllConnections();pins.revoke();
process.send({type:'proof',publicStatus:allowed.status,publicBody,untrustedRejected:denied,electron:process.versions.electron,chromium:process.versions.chrome});
}catch{process.send({type:'fault',reason:'certificate-native-proof-failed'});}
});