@@ -4,24 +4,26 @@ import Prelude
44
55import Control.Monad.ST.Class (liftST )
66import Control.Monad.ST.Ref as ST.Ref
7+ import Data.Either (Either (..))
78import Data.Foldable (for_ )
89import Data.Maybe (Maybe (..), fromMaybe )
910import Effect (Effect )
1011import Effect.Console as Console
11- import Effect.Exception (throwException )
12+ import Effect.Exception (Error , throwException )
1213import Node.Encoding as Node.Encoding
1314import Node.HTTP2 (headerKeys , headerString , sensitiveHeaders , toHeaders , toOptions )
1415import Node.HTTP2.Client as HTTP2.Client
1516import Node.HTTP2.Server as HTTP2.Server
1617import Node.Stream as Node.Stream
1718import Node.URL as URL
19+ import Test.MockCert (cert , key )
1820import Unsafe.Coerce (unsafeCoerce )
1921
20- basic_serverSecure :: Effect Unit
21- basic_serverSecure = do
22+ basic_serverSecure :: ( Either Error Unit -> Effect Unit ) -> Effect Unit
23+ basic_serverSecure complete = do
2224
2325 server <- HTTP2.Server .createSecureServer
24- (toOptions { key: mockKey , cert: mockCert })
26+ (toOptions { key: key , cert: cert })
2527
2628 void $ HTTP2.Server .onceStreamSecure server \stream _ _ -> do
2729 HTTP2.Server .respond stream
@@ -41,7 +43,9 @@ basic_serverSecure = do
4143 Node.Stream .end (HTTP2.Server .toDuplex stream)
4244 $ case _ of
4345 Just err -> throwException err
44- Nothing -> HTTP2.Server .closeServerSecure server (pure unit)
46+ Nothing -> do
47+ HTTP2.Server .closeServerSecure server (pure unit)
48+ complete (Right unit)
4549
4650 HTTP2.Server .listenSecure server
4751 (toOptions { port: 8443 })
@@ -52,7 +56,7 @@ basic_client = do
5256
5357 clientsession <- HTTP2.Client .connect
5458 (URL .parse " https://localhost:8443" )
55- (toOptions { ca: mockCert })
59+ (toOptions { ca: cert })
5660 (\_ _ -> pure unit)
5761
5862 clientstream <- HTTP2.Client .request clientsession
@@ -88,63 +92,3 @@ headers_sensitive = do
8892 { " cookie" : " some-cookie"
8993 , " other-sensitive-header" : " very secret data"
9094 }
91-
92- -- https://letsencrypt.org/docs/certificates-for-localhost/#making-and-trusting-your-own-certificates
93- --
94- -- Generate localhost.crt and localhost.key with 10 year expiration:
95- --
96- -- openssl req -x509 -out localhost.crt -keyout localhost.key -newkey rsa:2048 -nodes -sha256 -days 3650 -subj '/CN=localhost' -extensions EXT -config <( printf "[dn]\nCN=localhost\n[req]\ndistinguished_name = dn\n[EXT]\nsubjectAltName=DNS:localhost\nkeyUsage=digitalSignature\nextendedKeyUsage=serverAuth")
97- --
98-
99- mockCert :: String
100- mockCert =
101- """ -----BEGIN CERTIFICATE-----
102- MIIDDzCCAfegAwIBAgIUUyn89RHpZC9irOiqJpcBqFRw2HgwDQYJKoZIhvcNAQEL
103- BQAwFDESMBAGA1UEAwwJbG9jYWxob3N0MB4XDTIyMTExODAyMTkyN1oXDTMyMTEx
104- NTAyMTkyN1owFDESMBAGA1UEAwwJbG9jYWxob3N0MIIBIjANBgkqhkiG9w0BAQEF
105- AAOCAQ8AMIIBCgKCAQEA0REkgizCB39n47Z3JXcW+GPPym4MXBb9HAHBJbH1+m/R
106- 0EkdunDyXr8cKveABgq3/kazWjXlGwNXUklKYCydcnmtNVBub4s1wXAsegRaPMmo
107- RzisW7FWaqcLcBMAuwrub2NTVsX0HtO5qZiEKNx6AAbWFizFmMQ9K/9VprT1OLWy
108- vtIOlR/YK+PKruNWeNpvhx91zmwb69lgrqUcwMHguLWgoz0JJgzh7cerexbT+eKC
109- CuA9Ub8ctQD8SIl3eF7OzsvmQHSr+yABo3TJj7UZLh0B3j1uB8RLQvenVilc4YPz
110- MK/R6Jf8RjRssGommbUqVaXRjJfYQ2As2tkzRS90cwIDAQABo1kwVzAUBgNVHREE
111- DTALgglsb2NhbGhvc3QwCwYDVR0PBAQDAgeAMBMGA1UdJQQMMAoGCCsGAQUFBwMB
112- MB0GA1UdDgQWBBS5+ngK++/FbHQ4Uf8qMZDK6tSNlDANBgkqhkiG9w0BAQsFAAOC
113- AQEAj5nTUka4P/hWkV+Wa9Rp/ijqv2ah2ukU1u73QyprG2/gHmFpYvNFJ7lG9O9r
114- Wuvsz4g4moX9kgt/9GnpUbZBUE7zPau74P06lFcXhKAhiZcpsS+CZbMIsbfilWS0
115- SBbs8OTLvexOqPP4pTvlc67zPkuB3tjOnHhPar8VSAiBp2s0l6UF2vWZ69Xj3ice
116- DadE6thrH41GN/OSROKWL6dEueNTuQaU1Rx9Nxh8hvKiDJZ7l8oiHGYERoGwJJro
117- tWBqRvX/C4TpnS+ckhOyqrHUXN66lVaact9GaBd7n6oCKzDY/GtENCLJnNKte5VI
118- SATt1Hpnw3S/zwX9imqABqneAA==
119- -----END CERTIFICATE-----"""
120-
121- mockKey :: String
122- mockKey =
123- """ -----BEGIN PRIVATE KEY-----
124- MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDRESSCLMIHf2fj
125- tncldxb4Y8/KbgxcFv0cAcElsfX6b9HQSR26cPJevxwq94AGCrf+RrNaNeUbA1dS
126- SUpgLJ1yea01UG5vizXBcCx6BFo8yahHOKxbsVZqpwtwEwC7Cu5vY1NWxfQe07mp
127- mIQo3HoABtYWLMWYxD0r/1WmtPU4tbK+0g6VH9gr48qu41Z42m+HH3XObBvr2WCu
128- pRzAweC4taCjPQkmDOHtx6t7FtP54oIK4D1Rvxy1APxIiXd4Xs7Oy+ZAdKv7IAGj
129- dMmPtRkuHQHePW4HxEtC96dWKVzhg/Mwr9Hol/xGNGywaiaZtSpVpdGMl9hDYCza
130- 2TNFL3RzAgMBAAECggEAJggqTgv6WAbTTVdaIVSitxjhKgAO+4mrDbc7/bF7/8zr
131- rCpA4DO/w4CcjSxs+6xjgDw4UEbRoLJg5jUy9H/pPHPqEHLLRDtc0g2n6aJ1D+3X
132- UO18XUnLYKd2qzKpxVzdtyGofXaRTDJT6gg2soA5KVwVAf+vCnVYc3KFkEgG/AOt
133- jhvbxK+xA4CGjGPYxASO5K3IVJxb419hi8dizgtdJaotysvfspth5WOOoiBtVhuB
134- 6ORZt9DbN1AK9U3nV76NsjHeQWcMsDqt8w/KRkok4X9rkQ86pylZcDUyoqkf+aYB
135- 09FgDiw2iSj9k6kkR0y1o/sRsCN7PoRmJgEhrRWPcQKBgQDlflzyoaVUCIAZQAMo
136- O3vJE/AEOnvB+eHmqGSi6nGHUxJavxm8dxJRqY2fzA/VeVvp19Nxs1Eh8pskHav4
137- n+syRtGzkKIE0x9/KThhgzbqZl+NT5afHMhUHvmepMf8J+71giMC2v2yQC0aFVi7
138- 3frv3YNuBbC69FWkeYOjq/MJZwKBgQDpNs6nYmtR3bLBWKoLSOTLGV8Bhhhzt+tu
139- nm6LVA464ib039m5BoWne890InxgaDNHfuL++n473JFXuwQMBBY3YLD3OPa5uW4a
140- gt+oYUJKh+qGio395GnZ0W/Sf5GBpdPJ+pTMqGqlo/NWSPuwCdMd5T6RfvnEJzzv
141- 0/jZCAJ5FQKBgCE2yaMADBp+ZHPDFPHksgSnEwy5niGz1aL5ah8+CRJJzpU9pS7m
142- mMsi2/Ftqjj+KHROnTaOekaMgzGV7ca89mA/aagwXZKPL7bKs3NBd1gzWs7r3uPG
143- WaP7G6t/M8ZlzSrRG9oU8bSznxNwVXhTJzdB+vyYbDySkjaMs6WjhDgvAoGBAJj0
144- mE8R7r9Pv1it9UDXey91oWkXcNwciW4QvQHmjDq0bsZ2No7ypyA0xNgvchGs5c0D
145- fI+s7LQIMs8uWjYjTArgAND0bGVdJ8h9g4Ek4NyPDhNVtlEJyR7SDRwrDNzSTPiQ
146- v50G7INc51D1JxXLK8rUutekRt4Ouhm1leWKKk0NAoGBALvc9wF7XcgGHZa1RRk9
147- jH0vOkrn632Epzml1mXg0//2mw+7iQP3q5KtRruaIk6ifLSHznzqAkowhKFH+iCH
148- wnecLhsl5FnL0JAipIxBHdX0iTttJf4UR/2wTo3RalGjEcMjMCUrSdkhBjRH4Gdc
149- fBuXFtwhIuiggNR7UlHxbYpq
150- -----END PRIVATE KEY-----"""
0 commit comments