on master help sign in
Merge PR #783
commit3a276491cc928b533ab2689450067db36e75a41b authorKazu Yamamoto <kazu@iij.ad.jp> dateWed 8 Jan 2020, 19:42 (7 years ago) parent21fc6b035a8624
17 files changed+75−130
.azure/azure-linux-template.yml+8−22 .azure/azure-osx-template.yml+2−12 .azure/azure-windows-template.yml+4−3 .gitignore+1 stack-lts-11.yaml+3−6 stack-lts-12.yaml+3−6 stack-lts-6.yaml−35 stack-lts-9.yaml−31 stack-nightly.yaml+20 stack.yaml+3−7 warp-tls/Network/Wai/Handler/WarpTLS.hs+2 warp-tls/warp-tls.cabal+5−5 warp/Network/Wai/Handler/Warp.hs+9−1 warp/Network/Wai/Handler/Warp/HTTP2/Request.hs+2−1 warp/Network/Wai/Handler/Warp/Request.hs+7 warp/Network/Wai/Handler/Warp/Types.hs+2 warp/warp.cabal+4−1
.azure/azure-linux-template.yml+8−22
@@ -5,16 +5,6 @@ jobs:
55 vmImage: ${{ parameters.vmImage }}
66 strategy:
77 matrix:
8− stack-def:
9− BUILD: stack
10− stack-lts-6:
11− BUILD: stack
12− STACK_YAML: stack-lts-6.yaml
13− ARGS: "--resolver lts-6"
14− stack-lts-9:
15− BUILD: stack
16− STACK_YAML: stack-lts-9.yaml
17− ARGS: "--resolver lts-9"
188 stack-lts-11:
199 BUILD: stack
2010 STACK_YAML: stack-lts-11.yaml
@@ -23,17 +13,13 @@ jobs:
2313 BUILD: stack
2414 STACK_YAML: stack-lts-12.yaml
2515 ARGS: "--resolver lts-12"
26− stack-lts-13:
16+ stack-lts-14:
2717 BUILD: stack
28− ARGS: "--resolver lts-13"
29− cabal-7.10.3:
30− BUILD: cabal
31− GHCVER: 7.10.3
32− CABALVER: 1.22
33− cabal-8.0.2:
34− BUILD: cabal
35− GHCVER: 8.0.2
36− CABALVER: 1.24
18+ ARGS: "--resolver lts-14"
19+ stack-nightly:
20+ BUILD: stack
21+ STACK_YAML: stack-nightly.yaml
22+ ARGS: "--resolver nightly"
3723 cabal-8.2.2:
3824 BUILD: cabal
3925 GHCVER: 8.4.4
@@ -42,9 +28,9 @@ jobs:
4228 BUILD: cabal
4329 GHCVER: 8.4.4
4430 CABALVER: 2.2
45− cabal-8.6.4:
31+ cabal-8.6.5:
4632 BUILD: cabal
47− GHCVER: 8.6.4
33+ GHCVER: 8.6.5
4834 CABALVER: 2.4
4935 maxParallel: 6
5036 steps:
.azure/azure-osx-template.yml+2−12
@@ -5,16 +5,6 @@ jobs:
55 vmImage: ${{ parameters.vmImage }}
66 strategy:
77 matrix:
8− stack-def:
9− BUILD: stack
10− stack-lts-6:
11− BUILD: stack
12− STACK_YAML: stack-lts-6.yaml
13− ARGS: "--resolver lts-6"
14− stack-lts-9:
15− BUILD: stack
16− STACK_YAML: stack-lts-9.yaml
17− ARGS: "--resolver lts-9"
188 stack-lts-11:
199 BUILD: stack
2010 STACK_YAML: stack-lts-11.yaml
@@ -23,9 +13,9 @@ jobs:
2313 BUILD: stack
2414 STACK_YAML: stack-lts-12.yaml
2515 ARGS: "--resolver lts-12"
26− stack-lts-13:
16+ stack-lts-14:
2717 BUILD: stack
28− ARGS: "--resolver lts-13"
18+ ARGS: "--resolver lts-14"
2919 maxParallel: 3
3020 steps:
3121 - script: |
.azure/azure-windows-template.yml+4−3
@@ -5,9 +5,9 @@ jobs:
55 vmImage: ${{ parameters.vmImage }}
66 strategy:
77 matrix:
8− stack-lts-13:
8+ stack-lts-14:
99 BUILD: stack
10− ARGS: "--resolver lts-13"
10+ ARGS: "--resolver lts-14"
1111 maxParallel: 3
1212 steps:
1313 - bash: |
@@ -16,7 +16,8 @@ jobs:
1616 unzip -o /usr/bin/stack.zip -d /usr/bin/
1717 stack setup $ARGS > /dev/null
1818 stack --install-ghc $ARGS test --bench --only-dependencies
19− stack $ARGS test --bench --no-run-benchmarks
19+ stack $ARGS test --bench --no-run-benchmarks --no-run-tests
20+ stack $ARGS test --bench --no-run-benchmarks --jobs 1 # non-parallel test execution
2021 env:
2122 OS_NAME: ${{ parameters.os }}
2223 displayName: 'Installation ${{parameters.os}} & Test'
.gitignore+1
@@ -9,3 +9,4 @@ tarballs/
99cabal.sandbox.config
1010.stack-work/
1111*~
12+stack*.yaml.lock
stack-lts-11.yaml+3−6
@@ -17,14 +17,11 @@ extra-deps:
1717- streaming-commons-0.2.1.0@sha256:163af02944f374f316e35257c1afbffefd2c2852a85a151d1ea0ad22152cf28d,4990
1818- http2-2.0.0
1919- network-byte-order-0.1.1.0
20+- tls-1.5.3
21+- tls-session-manager-0.0.4
22+- x509-1.7.5
2023nix:
2124 enable: false
2225 packages:
2326 - fcgi
2427 - zlib
25−image:
26− containers:
27− - base: "fpco/pid1"
28− name: "yesodweb/warp"
29− executables:
30− - warp
stack-lts-12.yaml+3−6
@@ -18,12 +18,9 @@ nix:
1818 packages:
1919 - fcgi
2020 - zlib
21−image:
22− containers:
23− - base: "fpco/pid1"
24− name: "yesodweb/warp"
25− executables:
26− - warp
2721extra-deps:
2822- http2-2.0.0
2923- network-byte-order-0.1.1.0
24+- tls-1.5.3
25+- tls-session-manager-0.0.4
26+- x509-1.7.5
stack-lts-6.yamldeleted−35
@@ -1,35 +0,0 @@
1−resolver: lts-6.35
2−packages:
3−- ./auto-update
4−- ./mime-types
5−- ./wai
6−- ./wai-extra
7−- ./warp
8−- ./warp-tls
9−- ./wai-app-static
10−- ./wai-websockets
11−- ./wai-conduit
12−- ./time-manager
13−extra-deps:
14−- bsb-http-chunked-0.0.0.2@sha256:0571ef33ec5530104503d32eaf24f2d7c221f350e5fc475a6dd8e84311bc0ca1,1792
15−- streaming-commons-0.2.1.0@sha256:163af02944f374f316e35257c1afbffefd2c2852a85a151d1ea0ad22152cf28d,4990
16−- tls-session-manager-0.0.0.2@sha256:e3d3f8a026196df46746a19d3d7d31211b2fca3aefed9074e951b2dcc1b8833c,872
17−- wai-logger-2.3.2@sha256:7f5dbc72c0753bd3e0e73f8f542d9d159d1d70f8ff3a3ec16d0b74b500534fc6,1572
18−- gauge-0.2.3@sha256:ce41cb66ebf730a5050181db0338b1a4b3f76ac71331bf5070089bcd4352ff46,3777
19−- psqueues-0.2.7.0@sha256:189970837d0aae01f48cd2a8aac6ce314191939e118cc0488aee1fb12da1956a,4757
20−- basement-0.0.7@rev:0
21−- http-client-0.5.13.1@rev:0
22−- http-types-0.12.3@rev:0
23−- http2-2.0.0
24−- network-byte-order-0.1.1.0
25−nix:
26− enable: false
27− packages:
28− - fcgi
29− - zlib
30−image:
31− containers:
32− - base: "fpco/pid1"
33− name: "yesodweb/warp"
34− executables:
35− - warp
stack-lts-9.yamldeleted−31
@@ -1,31 +0,0 @@
1−resolver: lts-9.21
2−packages:
3−- ./auto-update
4−- ./mime-types
5−- ./wai
6−- ./wai-extra
7−- ./warp
8−- ./warp-tls
9−- ./wai-app-static
10−- ./wai-websockets
11−- ./wai-conduit
12−- ./time-manager
13−extra-deps:
14−- bsb-http-chunked-0.0.0.2@sha256:0571ef33ec5530104503d32eaf24f2d7c221f350e5fc475a6dd8e84311bc0ca1,1792
15−- streaming-commons-0.2.1.0@sha256:163af02944f374f316e35257c1afbffefd2c2852a85a151d1ea0ad22152cf28d,4990
16−- wai-logger-2.3.2@sha256:7f5dbc72c0753bd3e0e73f8f542d9d159d1d70f8ff3a3ec16d0b74b500534fc6,1572
17−- http-client-0.5.13.1@rev:0
18−- http-types-0.12.3@rev:0
19−- http2-2.0.0
20−- network-byte-order-0.1.1.0
21−nix:
22− enable: false
23− packages:
24− - fcgi
25− - zlib
26−image:
27− containers:
28− - base: "fpco/pid1"
29− name: "yesodweb/warp"
30− executables:
31− - warp
stack-nightly.yamlnew file+20
@@ -0,0 +1,20 @@
1+resolver: nightly-2020-01-08
2+packages:
3+- ./auto-update
4+- ./mime-types
5+- ./wai
6+- ./wai-extra
7+- ./warp
8+- ./warp-tls
9+- ./wai-app-static
10+- ./wai-websockets
11+- ./wai-conduit
12+- ./time-manager
13+flags:
14+ wai-extra:
15+ build-example: true
16+nix:
17+ enable: false
18+ packages:
19+ - fcgi
20+ - zlib
stack.yaml+3−7
@@ -1,4 +1,4 @@
1−resolver: lts-13.14
1+resolver: lts-14.20
22packages:
33- ./auto-update
44- ./mime-types
@@ -18,12 +18,8 @@ nix:
1818 packages:
1919 - fcgi
2020 - zlib
21−image:
22− containers:
23− - base: "fpco/pid1"
24− name: "yesodweb/warp"
25− executables:
26− - warp
2721extra-deps:
2822- http2-2.0.0
2923- network-byte-order-0.1.1.0
24+- tls-1.5.3
25+- tls-session-manager-0.0.4
warp-tls/Network/Wai/Handler/WarpTLS.hs+2
@@ -468,11 +468,13 @@ getTLSinfo ctx = do
468468#if MIN_VERSION_tls(1,5,0)
469469 TLS.TLS13 -> (3,4)
470470#endif
471+ clientCert <- TLS.getClientCertificateChain ctx
471472 return TLS {
472473 tlsMajorVersion = major
473474 , tlsMinorVersion = minor
474475 , tlsNegotiatedProtocol = proto
475476 , tlsChiperID = TLS.cipherID infoCipher
477+ , tlsClientCertificate = clientCert
476478 }
477479
478480tryIO :: IO a -> IO (Either IOException a)
warp-tls/warp-tls.cabal+5−5
@@ -1,5 +1,5 @@
11Name: warp-tls
2−Version: 3.2.9
2+Version: 3.2.10
33Synopsis: HTTP over TLS support for Warp via the TLS package
44License: MIT
55License-file: LICENSE
@@ -18,16 +18,16 @@ description: SSLv1 and SSLv2 are obsoleted by IETF.
1818extra-source-files: ChangeLog.md README.md
1919
2020Library
21− Build-Depends: base >= 4.8 && < 5
21+ Build-Depends: base >= 4.10 && < 5
2222 , bytestring >= 0.9
2323 , wai >= 3.2 && < 3.3
24− , warp >= 3.3.5 && < 3.4
24+ , warp >= 3.3.6 && < 3.4
2525 , data-default-class >= 0.0.1
26− , tls >= 1.3.10
26+ , tls >= 1.5.3
2727 , cryptonite >= 0.12
2828 , network >= 2.2.1
2929 , streaming-commons
30− , tls-session-manager >= 0.0.0.1
30+ , tls-session-manager >= 0.0.4
3131 Exposed-modules: Network.Wai.Handler.WarpTLS
3232 ghc-options: -Wall
3333 if os(windows)
warp/Network/Wai/Handler/Warp.hs+9−1
@@ -97,6 +97,7 @@ module Network.Wai.Handler.Warp (
9797 , pauseTimeout
9898 , FileInfo(..)
9999 , getFileInfo
100+ , clientCertificate
100101 , withApplication
101102 , withApplicationSettings
102103 , testWithApplication
@@ -122,9 +123,10 @@ module Network.Wai.Handler.Warp (
122123 , defaultPushPromise
123124 ) where
124125
125−import Control.Exception (SomeException, throwIO)
126+import Control.Exception (SomeException, throwIO, throw)
126127import Data.Streaming.Network (HostPreference)
127128import qualified Data.Vault.Lazy as Vault
129+import Data.X509
128130import qualified Network.HTTP.Types as H
129131import Network.Socket (SockAddr)
130132import Network.Wai (Request, Response, vault)
@@ -491,3 +493,9 @@ setGracefulCloseTimeout2 x y = y { settingsGracefulCloseTimeout2 = x }
491493-- Since 3.3.5
492494getGracefulCloseTimeout2 :: Settings -> Int
493495getGracefulCloseTimeout2 = settingsGracefulCloseTimeout2
496+
497+-- | Getting information of client certificate.
498+--
499+-- Since 3.3.5
500+clientCertificate :: Request -> Maybe CertificateChain
501+clientCertificate = join . Vault.lookup getClientCertificateKey . vault
warp/Network/Wai/Handler/Warp/HTTP2/Request.hs+2−1
@@ -22,7 +22,7 @@ import qualified System.TimeManager as T
2222
2323import Network.Wai.Handler.Warp.HTTP2.Types
2424import Network.Wai.Handler.Warp.Imports
25−import Network.Wai.Handler.Warp.Request (getFileInfoKey, pauseTimeoutKey)
25+import Network.Wai.Handler.Warp.Request (getFileInfoKey, pauseTimeoutKey, getClientCertificateKey)
2626import qualified Network.Wai.Handler.Warp.Settings as S (Settings, settingsNoParsePath)
2727import Network.Wai.Handler.Warp.Types
2828
@@ -83,6 +83,7 @@ toRequest' ii settings addr ref (reqths,reqvt) bodylen body th transport = retur
8383 $ Vault.insert setHTTP2DataKey (writeIORef ref)
8484 $ Vault.insert modifyHTTP2DataKey (modifyIORef' ref)
8585 $ Vault.insert pauseTimeoutKey (T.pause th)
86+ $ Vault.insert getClientCertificateKey (tlsClientCertificate transport)
8687 Vault.empty
8788
8889getHTTP2DataKey :: Vault.Key (IO (Maybe HTTP2Data))
warp/Network/Wai/Handler/Warp/Request.hs+7
@@ -9,6 +9,7 @@ module Network.Wai.Handler.Warp.Request (
99 , headerLines
1010 , pauseTimeoutKey
1111 , getFileInfoKey
12+ , getClientCertificateKey
1213 , NoKeepAliveRequest (..)
1314 ) where
1415
@@ -21,6 +22,7 @@ import qualified Data.CaseInsensitive as CI
2122import qualified Data.IORef as I
2223import Data.Typeable (Typeable)
2324import qualified Data.Vault.Lazy as Vault
25+import Data.X509
2426import qualified Network.HTTP.Types as H
2527import Network.Socket (SockAddr)
2628import Network.Wai
@@ -76,6 +78,7 @@ recvRequest firstRequest settings conn ii th addr src transport = do
7678 rawPath = if settingsNoParsePath settings then unparsedPath else path
7779 vaultValue = Vault.insert pauseTimeoutKey (Timeout.pause th)
7880 $ Vault.insert getFileInfoKey (getFileInfo ii)
81+ $ Vault.insert getClientCertificateKey (tlsClientCertificate transport)
7982 Vault.empty
8083 (rbody, remainingRef, bodyLength) <- bodyAndSource src cl te
8184 -- body producing function which will produce '100-continue', if needed
@@ -300,3 +303,7 @@ pauseTimeoutKey = unsafePerformIO Vault.newKey
300303getFileInfoKey :: Vault.Key (FilePath -> IO FileInfo)
301304getFileInfoKey = unsafePerformIO Vault.newKey
302305{-# NOINLINE getFileInfoKey #-}
306+
307+getClientCertificateKey :: Vault.Key (Maybe CertificateChain)
308+getClientCertificateKey = unsafePerformIO Vault.newKey
309+{-# NOINLINE getClientCertificateKey #-}
warp/Network/Wai/Handler/Warp/Types.hs+2
@@ -8,6 +8,7 @@ import Control.Exception
88import qualified Data.ByteString as S
99import Data.IORef (IORef, readIORef, writeIORef, newIORef)
1010import Data.Typeable (Typeable)
11+import Data.X509
1112import Foreign.Ptr (Ptr)
1213import System.Posix.Types (Fd)
1314import qualified System.TimeManager as T
@@ -179,6 +180,7 @@ data Transport = TCP -- ^ Plain channel: TCP
179180 , tlsMinorVersion :: Int
180181 , tlsNegotiatedProtocol :: Maybe ByteString -- ^ The result of Application Layer Protocol Negociation in RFC 7301
181182 , tlsChiperID :: Word16
183+ , tlsClientCertificate :: Maybe CertificateChain
182184 } -- ^ Encrypted channel: TLS or SSL
183185
184186isTransportSecure :: Transport -> Bool
warp/warp.cabal+4−1
@@ -1,5 +1,5 @@
11Name: warp
2−Version: 3.3.5
2+Version: 3.3.6
33Synopsis: A fast, light-weight web server for WAI applications.
44License: MIT
55License-file: LICENSE
@@ -56,6 +56,7 @@ Library
5656 , vault >= 0.3
5757 , wai >= 3.2 && < 3.3
5858 , word8
59+ , x509
5960 if impl(ghc < 8)
6061 Build-Depends: semigroups
6162 if flag(network-bytestring)
@@ -211,6 +212,7 @@ Test-Suite spec
211212 , vault
212213 , wai >= 3.2 && < 3.3
213214 , word8
215+ , x509
214216 -- Build-Tool-Depends: hspec-discover:hspec-discover
215217 if impl(ghc < 8)
216218 Build-Depends: semigroups
@@ -249,6 +251,7 @@ Benchmark parser
249251 , network
250252 , time-manager
251253 , unix-compat
254+ , x509
252255 if impl(ghc < 8)
253256 Build-Depends: semigroups
254257