24 lines
1.5 KiB
JavaScript
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'});}
|
|
});
|