99 */
1010
1111import { HeaderType } from './common' ;
12- import { NativeBridgeDefinition } from './websocket.definition' ;
12+ import { NativeBridgeDefinition , WebSocketBridgeConnectOptions } from './websocket.definition' ;
1313
1414@NativeClass
1515class RCTSRWebSocketDelegateImpl extends NSObject implements RCTSRWebSocketDelegate {
@@ -41,7 +41,7 @@ export class NativeBridge extends NativeBridgeDefinition {
4141 // store the delegate so it isn't garbage collected
4242 // TODO: fix the iOS runtime so we don't need this
4343 delegate ! : RCTSRWebSocketDelegateImpl ;
44- connect ( url : string , protocols : string [ ] , headers : HeaderType ) {
44+ connect ( { url , protocols, headers, pinnedCertificates } : WebSocketBridgeConnectOptions ) : void {
4545 const nativeUrl = NSURL . URLWithString ( url ) ;
4646 const request = NSMutableURLRequest . requestWithURL ( nativeUrl ) ;
4747 // NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL];
@@ -63,6 +63,24 @@ export class NativeBridge extends NativeBridgeDefinition {
6363 for ( const k of Object . keys ( headers . headers ) ) {
6464 request . addValueForHTTPHeaderField ( `${ headers . headers [ k ] } ` , k ) ;
6565 }
66+ if ( pinnedCertificates ) {
67+ const sslArray = NSMutableArray . new ( ) ;
68+
69+ for ( const c of pinnedCertificates ) {
70+ // convert from pem to der (base64)
71+ const der = c
72+ . replace ( / - - - - - B E G I N C E R T I F I C A T E - - - - - / g, '' )
73+ . replace ( / - - - - - E N D C E R T I F I C A T E - - - - - / g, '' )
74+ . replace ( / \r ? \n / g, '' ) ;
75+ const cert = SecCertificateCreateWithData ( null , NSData . alloc ( ) . initWithBase64EncodedStringOptions ( der , NSDataBase64DecodingOptions . IgnoreUnknownCharacters ) ) ;
76+ if ( cert ) {
77+ sslArray . addObject ( cert ) ;
78+ } else {
79+ console . warn ( 'Unable to create certificate from pem' ) ;
80+ }
81+ }
82+ request . RCTSR_SSLPinnedCertificates = sslArray ;
83+ }
6684
6785 const webSocket = RCTSRWebSocket . alloc ( ) . initWithURLRequestProtocols ( request , protocols ) ;
6886 this . nativeSocket = webSocket ;
0 commit comments